2014-12-26 29 views
0

在我的循環中,我試圖將class名稱添加到元素。爲了避免closure問題,我保持獨立的功能。我越來越關閉循環問題,我仍然使用單獨的功能

但我的問題仍然沒有解決。

我在對象發現類名是這樣的:

<button class="sidebar1 sidebar2 sidebar3 sidebar4 sidebar5">Click</button> 

這裏是我的JS:

var ob = {}; 

var catcheBars = {}; 
var sidebar = $('div.sidebar'); 
var catchedBar = sidebar; 


for(i=1; i <= 5; i++) { 
    if(!ob.hasOwnProperty(i+'page')) { 
     ob[i+'page'] = catchedBar; 
    } 
    var x = i; 
    var x = function (x) { 
     $(ob[x+'page']).find('button').addClass('sidebar'+x); 
    }(x) 


} 


$("#sideBar").html(ob['1page']); 

Live

+4

我認爲這是一個X/Y問題,你問爲什麼循環不起作用,但你真正想要的是克隆()該元素,而不僅僅是傳遞相同的引用。 – adeneo

+0

@Teemu,這不是整個功能,這是功能的一部分。 – 3gwebtrain

+0

你想'ob'包含什麼? –

回答

0

我更新了這個樣子,這對我的作品

var ob = {}; 

var catcheBars = {}; 
var sidebar = $('div.sidebar'); 

for(i=1; i <= 5; i++) { 
    if(!ob.hasOwnProperty(i+'page')) { 
     ob[i+'page'] = sidebar.clone(false); 
    } 
    var x = function (x) { 
     $(ob[x+'page']).addClass('sideBar'+x); 
    }(i); 
} 

sidebar.empty(); 
$("#sideBar").html(ob['1page']); 


console.log(ob); 

感謝大家! Live

+1

在這裏沒有必要做'function(x){}(i)'。試圖解決的問題是在循環結束後有一個稱爲* later *的回調函數。你可以做'$(ob [i +'page'])。addClass('sideBar'+ i);'這裏。 –

1

當你做var catchedBar = sidebar;你實際上是使catchedBar一個參考sidebar對象。然後在你的循環中,當你做ob[i+'page'] = catchedBar;時,你現在正在製作另一個參考。

當你做$(ob[x+'page']).addClass(),要添加的類一切集合中,因爲ob[x+'page']包含對$('div.sidebar')集合的引用。

這段代碼對於你想要實現的東西來說太複雜了。它可以使用jQuery的.each方法進行簡化:

$('div.sidebar').each(function(i, v){ 
    $(v).find('button').addClass('sidebar'+i); 
}); 

注:我不是100%肯定是你所試圖做的。

更新:看到您的意見後,我認爲,所有你需要做的是這樣的:

$('div.sidebar button').click(function(){ 
    $("#sideBar").html($(this).text()); 
}); 

DEMO:http://jsfiddle.net/xtcxv8hd/