43

子ノードのない要素を選択する必要があります(<p>テキストは子ノードであるため、テキストを含みます)。

を使用emptyしましたが、スペースも子ノードと見なします。

例:

マークアップ:

 <span> </span>
 <span></span>

脚本:

$("span:empty").html("this was empty!");

残念ながら、最初の要素にはスペースがあり、子ノードと見なされたため、2 番目の要素のみが選択されて変更されました。

子ノードのない要素を選択するにはどうすればよいですか? 空間を無と考えたい。できれば、コードでループを使用してそれらを選択しないようにしたいのですが、他の方法があるかもしれません。

4

4 に答える 4

100

どうですか

$("span:not(:has(*))")

子を持たないすべてのスパンを選択します。

説明

セレクターは:has()、「指定されたセレクターに一致する要素を少なくとも 1 つ含む要素を選択します」。ワイルドカード*はすべての要素を意味します。

a が直接の子としてだけでなく、その子孫のどこかに存在する場合、式$('div:has(p)')は a に一致します。<div><p>

セレクターは、:not()「指定されたセレクターに一致しないすべての要素を選択します」。

この場合、 は:has()すべてを選択し、 を使用:not()して「すべて」に一致しない要素を見つけます。つまり、何も一致しません。

デモ

于 2012-06-16T07:35:17.353 に答える
9
$.expr[":"]["no-children"] = function( elem ) {
    return !elem.firstChild || !$.trim(""+ elem.firstChild.nodeValue);
};
$("span:no-children").html("this was empty");

</p>

http://jsfiddle.net/k5eTS/6/

私が期待していた間に$.trim変換nullするjQueryの驚くべき「機能」がありました。文字列に手動で変換すると、これが修正されます。"""null"

于 2012-06-16T07:22:02.443 に答える
4

これを試すことができると思います:

$('span').filter(function() {
   return !this.innerHTML.replace(/\s/g,'').length;
});

デモ

于 2012-06-16T07:23:02.070 に答える
0

これを試して

$("span").each(function(){
if($(this).text().trim()=='')
$(this).text('Empty');
});

各機能が気に入らない場合は、

$("span").html(function(){
if($(this).text().trim()=='')
return 'Empty';
});
于 2012-06-16T07:33:58.727 に答える