47

いくつかのリスト項目を反復処理するときに、ネストされた foreach ループ内で各「$(this)」に相当するものをターゲットにする方法を見つけようとしています。これが私の問題の例です:

$('li').each(function(){
        // I believe $(this) would target each li item...
    $(this).children("li").each(function(){
        // ... but how can I target each of these li items? Doesn't $(this) target the original loop?
    });
});
4

5 に答える 5

84
$('li').each(function(){
    var $this = $(this);
    $this.children("li").each(function(){
        $this; // parent li
        this; // child li
    });
});
于 2013-05-02T19:31:23.813 に答える
10

Look at the basic "prototypes" of jQuery functions (or methods, if you will):

$[jQobject].[func]([callback]);

The callback is the function that will be invoked in the context of the jQ object. The context being this, obviously. Put simply that means that:

$('#foo').click(function(){});
   /\                 /\
   || Is the context  ||
   =====================

The same applies to your case, regardless of the loops being nested or not:

$('ul').each(function()
{
    //this is ul
    var that = this;//you'll often see code like this
    $('li', this).each(function()
    {
        //this is li
        //that is parent ul
    });
});
于 2013-05-02T19:35:44.940 に答える
3

しかし、これらの各liアイテムをターゲットにするにはどうすればよいですか? $(this) は元のループをターゲットにしていませんか?

いいえ。

this直接入っている関数から来ます。

于 2013-05-02T19:30:01.557 に答える
2

いいえ、それぞれの子アイテムthisを指します。<li>やってみて。

ほとんどの (すべてではないにしても) DOM と対話する jQuery コールバックthisは、作業中の DOM 要素に設定されます。

次のように書くこともできます。

$('li').children("li").each(function(){
    var $this = $(this);
});
于 2013-05-02T19:30:08.023 に答える