jquery: tricky Selektor Frage
Frage
Hallo, ich bin mit diesem Markup:
<div id="main">
<div nam="item">1</div>
<div nam="item">2</div>
<div>
<div nam="item">3</div>
<div nam="item">4</div>
<div nam="item">5</div>
</div>
<div nam="item">6</div>
<div nam="item">7</div>
</div>
ich jetzt die Auswahl nur das direkte Kind divs mit dieser Methode:
var divs = $("#main > [nam]"
meine Frage - ich will in einer Funktion, dies zu tun, wo ich nur das übergeordnete div passieren, wie würde ich den Wähler ändern muß
function get_rootChildren(div)
{
return($("* > [nam]",div));
}
^ dies ist falsch, aber ich denke, u wissen, was ich meine - wie dies geschehen könnte? thx, Fuxi
Lösung
Vielleicht:
$("#main > div.item")
parent > child
Spiele alle untergeordneten Elemente von „Kind“ von Elementen angegeben spezifiziert durch „Eltern“.
Zur Beantwortung Teil zwei - ich würde benutzen .children()
etwas wie folgt aus:
function get_rootChildren(div) {
$(div).children('div.item');
}
Andere Tipps
$('#main > div.item')
die #main div wählt, dann Direkt Kind div-Elemente mit einer Klasse von Elemente auswählen.
nur $ ( "# main> div.item") verwenden. die „>“ Selektor stellt sicher, dass das, was Sie nach stellen, die Kinder von dem, was vor kommt.
Modifizierte neue Frage passen
//returns direct children of parent which are divs and have an attribute named name with value item
function get_rootChildren(parent){
return $(" > div[nam='item']", parent);
}
Wenn Sie Ihre Struktur Code wirklich wie die Proben Sie zur Verfügung gestellt aussehen werde dann die folgende es tun wird.
$('#main > div.item')
Hier finden Sie auch in der Lage komplexere Strukturen zu behandeln
$("#main > div.item:not(:has(>div))").each(function(index,item){
alert($(item).text());
});
z. auf dem nach meinem zweiten Selektor würde immer noch nur 1,2,6,7 liefern, während die ersten 1,2,3,5,6,7
liefern würde<div id=main>
<div class="item">1</div>
<div class="item">2</div>
<div class="item">
<div class="item">3</div>
</div>
<div>
<div>4</div>
</div>
<div class="item">
<div>5</div>
</div>
<div class="item">6</div>
<div class="item">7</div>
</div>
Wenn Sie die ID des Eltern als String sind vorbei, könnten Sie den Ausdruck erstellen, bevor Sie es nennen:
function get_rootChildren(divId) {
var expr = "#" + divId + " > [nam]"; // creates expression for jQuery call
return $(expr);
}