1

この場合、jQuery が機能しない理由がわかりません。nav のすべての li アイテムを反復処理し、それぞれに ul 要素が存在するかどうかを確認しますが、すべてのアイテムが true を返します..?

私のマークアップ:

<div id="toolbar">
<ul>
 <li>
  <a href="somelink">some page</a>
 </li>
 <li>
  <a href="somelink">some page</a>
 </li>
 <li>
  <a href="somelink">some page</a>
    <ul>
     <li>
      <a href="somelink">some page</a>
      <ul>
        <li>
          <a href="somelink">some page</a>
        </li>
      </ul>
     </li>
    </ul>
 </li>
</ul>
</div>

私のjQuery:

// if has children make red
$("#toolbar li").each(function(){
 if($(this).has("ul")){
    $(this).css("background", "#ff0000");
 }
 else
 {
    $(this).css("background", "#336699"); 
 }
});

ご覧のとおり、3 番目の最上位レベルの li は true を返すはずですが、それらはすべて true を返します..?

4

7 に答える 7

2

http://jsfiddle.net/PddPv/

$("#toolbar li").each(function(){
    $(this).css("background", $('ul', this)[0] ? "#f00" : "#369");
});

whereは、JS が要素が存在するかどうか (メソッドのように) を$('ul', this)[0]教えてくれる便利な方法であり、条件演算子です。.length
?:

于 2013-08-04T16:04:52.653 に答える
1

.has()正しい方法で使用し.has()ていません。true または false を返しません

.has()ドキュメント に従って:

一致した要素のセットを、セレクターまたは DOM 要素に一致する子孫を持つ要素に減らします。

この方法で has を利用できます-

$(this).has("ul").css("background", "#ff0000");
$(this).not(':has(ul)').css("background", "#336699");

デモ----> http://jsfiddle.net/uTrLX/

http://api.jquery.com/has/

于 2013-08-04T16:04:10.283 に答える
0

これを行う別の方法:

$("li").css("background", "#336699");
$("#toolbar li:has(ul)").css("background", "#ff0000");

これは has セレクターを使用します。それがあなたがやりたかったことだと思います

または直接

 $("li").css("background", "#336699").has("ul").css("background", "#ff0000");
于 2013-08-04T16:04:02.757 に答える
0
// if has children make red
$("#toolbar li").each(function () {

    // This checks if finds any ul under it
    if ($(this).find("ul").length > 0) {
        $(this).css("background", "#ff0000");
    } else {
        $(this).css("background", "#336699");
    }
});
于 2013-08-04T15:55:26.853 に答える