先看如下代碼:
1 (function ($) { 2 3 var div = $("<div></div>").css({width: "100px", height: "100px"}); 4 var colors = ["red", "blue", "yellow"]; 5 for (var c = 0; c < colors.length; c++) { 6 var perDiv = div.clone(); 7 perDiv.css({ 8 background: colors[c] 9 }); 10 perDiv.click(function () { 11 console.log(colors[c]); 12 }); 13 $("body").append(perDiv); 14 } 15 16 })($);
效果圖:
無論點擊那個div都是輸出 underfined
所以此代碼不能解決每個div點擊出現不同的事件。
改進代碼:
1 (function ($) { 2 3 var div = $("<div></div>").css({width: "100px", height: "100px"}); 4 var colors = ["red", "blue", "yellow"]; 5 for (var c = 0; c < colors.length; c++) { 6 var perDiv = div.clone(); 7 perDiv.css({ 8 background: colors[c] 9 }); 10 perDiv.addClass("a"+c); 11 $("body").append(perDiv); 12 } 13 14 for (var e=0;e<colors.length;e++){ 15 $(".a"+e).click(function () { 16 console.log($(this)); 17 }); 18 } 19 })($);
效果:
如圖,每當點擊一個對應就輸出一個信息。
總結:給每個元素添加個class或id 就行了╮(╯▽╰)╭
補充:2016-09-24
先看代碼:
1 $(function () { 2 3 var colors = ["red", "blue", "green"]; 4 var div = $("<div></div>").css({width: "100px", height: "100px"}); 5 6 for (var i = 0; i < colors.length; i++) { 7 var odiv = div.clone(); 8 $("body").append(odiv); 9 odiv.index = i; 10 odiv.css({background: colors[odiv.index]}); 11 } 12 });
效果圖:
看效果和上面一樣。
這個的好處:沒有添加類名,還實現了 "有分別"
思路:通過給odiv附加個屬性index來保存與其他odiv的不同
感覺這樣寫 高大上 有木有。。
補充:2016-11-30 10:07:36
1 var colors = ["red", "blue", "green"]; 2 var div = $("<div></div>").css({width: "100px", height: "100px"}); 3 function cloneDiv(num) { 4 for (var i = 0; i < num; i++) { 5 var odiv = div.clone(); 6 odiv.css("background", colors[i]); 7 $("body").append(odiv); 8 odiv.on("click", function () { 9 console.log(this); 10 }) 11 } 12 } 13 cloneDiv(colors.length);
運用this,實現不同。。