使用.each()访问循环的元素而不调用$(this)

时间:2011-07-25 17:20:50

标签: jquery

我正在使用.each()迭代jQuery对象$firstParagraph中的链接。当我遍历链接时,我想以绝对方式引用它们,而不调用$(this),每次调用它时都会创建一个新对象。因为当我在链接上独立迭代两次时(如下面的代码所示),那么两个实例中完成的工作就不会合并。

$firstParagraph = $("p").eq(0);

// Iterate over the links once
$firstParagraph.find("a").each( function()
    {
        $this = $(this);
        // Modify $this
    });

// Iterate over the links a second time
$firstParagraph.find("a").each( function()
    {
        $this = $(this);
        // I want to modify $this again, but without loosing
        // the work I did in the first iteration
    });

3 个答案:

答案 0 :(得分:4)

不要像你要求的那样猛烈地反对jQuery,让我告诉你如何做你真正需要做的事情:使用$(this).data('somekey', someval)$(this).data('somekey')来代替直接修改$(this)作为一个对象,因此失去了您想要做的任何事情,将数据附加到您的$(this)概念中,以便您能够将其恢复。 (文件here。)

答案 1 :(得分:1)

为什么不追加数组?当您使用简单变量时,它将始终覆盖它。

答案 2 :(得分:0)

您可以这样做:

var elemArray = [];
// Iterate over the links once
$firstParagraph.find("a").each( function(i)
    {
        $this = $(this);
        elemArray[i] = $this;
        // Modify $this
    });

// Iterate over the links a second time
$firstParagraph.find("a").each( function(i)
    {
        $this = elemArray[i];
        // I want to modify $this again, but without loosing
        // the work I did in the first iteration
    });

我不确定这是不是一个好主意,因为两个循环之间的事情可能会发生变化。