使用多个.each函数获取字符串到数组

时间:2012-12-06 15:02:32

标签: javascript jquery arrays

我有两个元素并且会在里面找到字符串。 (我使用.each`函数)

问题是第二个数组(在.each获得字符串之后)替换第一个数组。

对不起,如果你不明白,但试着看下面......

$('div').each(function () {
    var data = [];
    $('li', this).each(function () {
        data.push($(this).text());
    });
    var data_length = data.length;
    $(this).children("code").html(data + "");
    $("code").click(function () {
        data.move(data_length - 1, 0);
        $(this).html(data + "");
    });
});

Array.prototype.move = function (old_index, new_index) {
    if (new_index >= this.length) {
        var k = new_index - this.length;
        while ((k--) + 1) {
            this.push(undefined);
        }
    }
    this.splice(new_index, 0, this.splice(old_index, 1)[0]);
    return this; // for testing purposes
};

演示:http://jsfiddle.net/kdpN7/

我做错了什么?

2 个答案:

答案 0 :(得分:3)

出于同样的原因,你{@ 1}}也应该将你的点击事件与范围绑定。

问题是,你正在迭代2个div(你的$(this).children('code')),这意味着你要绑定each两次。第一次绑定$('code')时,它会绑定第一个数据数组(1),然后第二次绑定(2)。因此,它首先执行1s的单击代码,然后立即运行2s,从而覆盖。更改为code(或$(this).find("code"))并按预期工作。

http://jsfiddle.net/kdpN7/1/

答案 1 :(得分:1)

在这一行:

$("code").click(function () { ...

这告诉您使用该信息更新所有code。您需要更改它以使其特定于每个div:

$(this).find("code").click(function () { ...

更新了小提琴:http://jsfiddle.net/kdpN7/2/