jquery Auswahl von Elementen ohne sichtbare Kinder
Hier ist mein Ziel: etwas tun, auf ein element, ein <optgrooup>
, wenn alle seine Kinder sind unsichtbar.
Mein code unten beschreibt die in rot, wenn es alle invisible children. Aber ich will dies nur tun, wenn alle die Kinder unsichtbar sind. Wenn das element hat keine Kinder, die sichtbar sind, dann nicht markieren.
Wie kann ich Sie optimieren die jQuery-Selektor zu tun?
Vielen Dank im Voraus.
<select multiple="multiple" name="availableInstanceId" id="availableInstanceId">
<optgroup label="Option Group 1">
<option >visible item 1</option>
<option >visible item 2</option>
</optgroup>
<optgroup label="Option Group 2 - Should be highlighted">
<option style="display:none;">invisible A</option>
<option style="display: none">invisible B</option>
</optgroup>
<optgroup label="Option Group 3 - Should not be highlighted">
<option >visible C</option>
<option style="display: none">invisible D</option>
</optgroup></select>
<script type="text/javascript">
var filterOptions = function(e) {
//Goal: highlight the <optgroup>'s that have *only* invisible children
$( '#availableInstanceId > * > *:hidden').parent().css("border","3px solid red");
}
$(document).ready(function() {
filterOptions();
});
</script>
Screenshot von dem Bild hier: http://img144.imageshack.us/img144/556/selectexample.gif
- Was den Vergleich der Längen des arrays, zwischen der unsichtbaren und der Gesamt-Kinder?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie ausschließen möchten Elemente, die keine untergeordneten Elemente:
Beispiel arbeiten.
UPDATE: Dieser hat eine wesentlich bessere performance als meine ursprüngliche Antwort:
Dieser hat eine wesentlich bessere performance als meine original Antwort:
Wie wäre es mit zwei Linien zu tun? Eine, um es einzuschalten für jedes einzelne element, und einer zum ausschalten, wieder für jeden mit einem Kind sichtbar?
Kredit geht an Jed Schmidt. Der folgende code funktioniert in IE8.
Hinweis, dass der IE8 eigentlich gar nicht verstecken, die
<option>
Elemente trotz derdisplay: none
Stil. Auch der IE8 scheint nicht zu akzeptierenborder
Stile für<optgroup>
Elemente.Beispiel arbeiten: http://jsbin.com/aquya (Editable via http://jsbin.com/aquya/edit)
//Antwort auf Frage ändern css wie gewünscht
//remove empty optgroups Beispiel
Müssen Sie vergleichen ein array von alle :sichtbar vs. :hidden
hier einige pseudo-code