2009-04-22 3 views
4

は私のマークアップがあると言う:jqueryの:空が、無視してテキストノード

<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> 

は、どのように私は(なし子タグを持つもの)#num1, #num3 and #num4を返すようにulを照会していますか?以下のような

何か:ドキュメントからしかし

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

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

それがテキストを含んでいるので、上記のクエリは、私だけ#num4を返しています。

代わりにどうすればよいですか?

編集:私はまた

おかげ

を(聞かない)のjQuery 1.1.4を使用してい

答えて

2
+0

ああ私の悪い、これはその後 –

+0

ああ重複しています。私はあきらめる前にその質問へのリンクを探して、答えがここに載っていただけを投稿しました。私はまだかなり考えていない:not(:has)はとてもエレガントですが、それはそれです。 –

1

あなたはこれを試すことができます。

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

基本的には、関数かどうかをチェックする番号直接的な子供の数はゼロです。最も洗練されたソリューションではないかもしれませんが、少なくともそれはうまくいくでしょう。