2012-12-06 32 views
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/

我做了什麼錯?

+0

你'.move(L - 1,0)'可以寫成'a.unshift(a.pop ())'如果我沒有弄錯。 –

回答

3

出於同樣的原因,你做$(this).children('code')你也應該綁定你的點擊事件與範圍。

問題是,您正在迭代2個div(您的each),這意味着您要綁定$('code')兩次。第一次code必然會被點擊,它會與第一個數據數組(1)綁定,然後第二次綁定(2)。所以它首先要做1秒的點擊代碼,然後立即運行2秒,從而覆蓋。更改爲$(this).find("code")(或children),並按預期工作。

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

1

在此行中:

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

這是告訴更新所有code與信息。你需要改變它,所以它是具體到每一個DIV:

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

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

相關問題