如何使用selector在Jquery中的foreach循环中定位每个子节点

时间:2013-10-09 15:40:20

标签: javascript jquery

我正在使用Jquery,我想使用选择器在foreach循环中找到每个孩子:

   $('div.parents').children('a').each(function(i) {
        setTimeout(function(){
            $(this).trigger( "click" );
        },2000 + i * 2000); 
    });

然而, $(this) 似乎根本不起作用。该列表如下所示: 如果我将 $(this).trigger(“点击”); 更改为 $('a')。触发器(“点击”) ; 它会立即打开所有链接。

<div class="parents">
<a class="child"></a> 
<a class="child"></a> 
<a class="child"></a> 
...
</div>

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

this内的setTimeout指向this以外的setTimeout

你可以使用jQuery的$.proxy

$('div.parents').children('a').each(function(i) {
        setTimeout($.proxy(function(){
            $(this).trigger( "click" );
        },this),2000 + i * 2000); 
    });

.bind [仅适用于browsers compatible with ECMAScript 5]:

$('div.parents').children('a').each(function(i) {
        setTimeout(function(){
            $(this).trigger( "click" );
        }.bind(this),2000 + i * 2000); 
    });

答案 1 :(得分:2)

问题是this在setTimeout回调中没有指向被点击的元素,你可以使用一个闭包变量来解决这个问题

$('div.parents').children('a').each(function(i) {
    var $this = $(this)
    setTimeout(function(){
        $this.trigger( "click" );
    },2000 + i * 2000); 
});