0

我有两个元素,里面会有字符串。(我使用 .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/

我做错了什么?

4

2 回答 2

3

出于同样的原因,您$(this).children('code')还应该将单击事件与范围绑定。

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

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

于 2012-12-06T15:08:49.563 回答
1

在这条线上:

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

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

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

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

于 2012-12-06T15:09:46.237 回答