0

2つの要素があり、内部に文字列を取得します。(そして私は.each`関数を使用します)

問題は、2番目の配列(によって文字列を取得した後.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(your)を反復処理していることです。これは、 2回eachバインドしていることを意味します。$('code')最初codeはクリックにバインドされ、最初のデータ配列(1)にバインドされ、次に(2)に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 に答える