2009-04-22 22 views
4

sagen, mein Markup ist:jquery: leer, aber ignorieren Textknoten

<ul> 
    <li id="num1">hello</li> 
    <li id="num2"><p>hello</p></li> 
    <li id="num3">sdf dfg</li> 
    <li id="num4"></li> 
    <li id="num5"><a>linky</a></li> 
</ul> 

wie Abfrage ich die ul#num1, #num3 and #num4 (die, die ohne Kind-Tags) zurück?

wie etwas:

$('ul').children('li:empty') 

aber aus der Dokumentation:

:empty Returns: Array<Element(s)> 
Matches all elements that have no children (including text nodes). 

weil es Text enthält, wird die obige Abfrage Rückkehr mich nur #num4.

Was soll/kann ich stattdessen tun?

Edit: Ich bin auch mit jQuery 1.1.4 (nicht fragen)

Dank

Antwort

2
+0

ah mein schlecht, dann ist dies dann –

+0

Ah duplizieren. Ich suchte nach dem Link zu dieser Frage, bevor ich aufgab und nur posten, was die Antwort hier war. Ich denke immer noch nicht ganz das: nicht (: hat (*)) ist sehr ... elegant, aber es ist was es ist. –

1

Sie können dies versuchen:

$('ul').children().filter(function() 
{ 
    return $(this).children().length != 0; 
}); 

Grundsätzlich prüft die Funktion, ob die Anzahl von unmittelbaren Kindern ist Null. Es ist vielleicht nicht die eleganteste Lösung, aber zumindest wird es funktionieren.