0

これはおそらく単純なものですが、私はそれを機能させることができないようです。

私は次のコードを持っています:

<ul>
    <li class='jSH'>Users: <span>0</span></li>
    <li class='jSH'>Cars: <span>1</span></li>
</ul>

基本的に、span == 0の場合にliを非表示にする関数を作成しようとしています。これはjqueryコードですが、何らかの理由で機能しません。

if ($('.jSH span').text() == "0")
    $(this).closest('li').hide();
    alert("should hide");

したがって、この場合、最初のliに対して1つのアラートを受け取ります(span == 0の内容のため)が、liは非表示になりません。

この場合、「this」の使用に問題がありますか?

ありがとう!

4

4 に答える 4

3

.each現在のコードは複数のオブジェクトとその内容を返すため、使用することをお勧めします。これらのオブジェクト.eachは、個々の要素が処理されるループのようなプロセスに分離されます。フィドル: http: //jsfiddle.net/fEEFq/
Javascriptコード:

    $('.jSH span').each(function(){
        if ($(this).text() == "0"){
            $(this).closest('li').hide();
            alert("should hide"); 
        }
    });
于 2013-03-26T00:47:54.640 に答える
2

問題は$(this)次のとおりです。これは、jQueryのコンテキストでは、イベントコールバック(たとえば、マウスオーバーやクリック)内でのみ機能します。その行を次のように修正する必要があります。

$('.jSH span').closest('li').hide();

{}さらに、 ifステートメントの本体の周りにはありません。これにより、ifの後の最初のステートメントのみが実行されます。

于 2013-03-26T00:47:43.200 に答える
2

$.filterを使用できます

$('.jSH').filter(function() {
  return $('span',this).text() == "0";
}).hide();
于 2013-03-26T01:02:36.063 に答える
1

this条件付きステートメントを参照しているため、目的の結果が返されません。

その代わり:

$('.jSH span').each(function(){
    if ($(this).text() == "0"){  // now `this` is referring to every span in the jQuery collection
        $(this).closest('li').hide();
    }
});

http://api.jquery.com/each/

于 2013-03-26T00:48:38.677 に答える