2014-01-10 24 views
0

我已經寫了一個forEach循環,它通過div的數組(通過ID),選擇具有某個類的子元素並從中移除另一個類。我有幾個問題將變量轉換回選擇器並將其加入到其他變量中。因此,我的forEach循環不起作用。jQuery - ForEach循環中的變量選擇器

http://jsfiddle.net/NWmB5/7/(試着點擊其中一個鏈接,如果代碼工作的第三項應該再次變黑)

var toDoCategories; 

$(document).ready(function() { 

toDoCategories = [$("#testDiv"),$("#anotherDiv"),$("thirdDiv")]; 
setTimelinePosition($('#thirdDiv')); 

$('#targetFirstDiv').click(function() { 
setTimelinePosition($('#anotherDiv')); 

}); 
$('#targetSecondDiv').click(function() { 
setTimelinePosition($('#testDiv')); 

}); 

}); 


/* Show current position on timeline */ 
function setTimelinePosition($position) { 


var $theTimelineTrigger = $('span.timelineTrigger'); 

toDoCategories.forEach(function(currentCategory) { 


var $deselectTimelinePositionElement = $(currentCategory, $theTimelineTrigger); 

$($deselectTimelinePositionElement).removeClass('currentPosition'); 
}); 
+1

您在第三個DIV選擇器中缺少一個'#',並且這種整個方法非常糟糕。 – adeneo

+0

http://jsfiddle.net/NWmB5/8/ – adeneo

+0

謝謝@adeneo。雖然這段代碼只適用於HTML原型(如果沒有正確的開發人員重寫,大多數情況下不會接近生產),但我想讓它不那麼「可怕」。 我認爲一個明智的做法是將一個公共類應用於所有帶有ID的div,然後放入數組中並使用它來生成數組。我會很感激你可能有任何提示,讓開發人員不那麼冒犯。 –

回答

1

它應該是越簡單

$(document).ready(function() { 

    var $toDoCategories = $("#testDiv, #anotherDiv, #thirdDiv"); //NOTE HERE 

    setTimelinePosition('#thirdDiv'); 

    $('#targetFirstDiv').click(function() { 
     setTimelinePosition('#anotherDiv'); 
    }); 
    $('#targetSecondDiv').click(function() { 
     setTimelinePosition('#testDiv'); 
    }); 

    /* Show current position on timeline */ 
    function setTimelinePosition(position) { 
     $toDoCategories.find('.currentPosition').removeClass('currentPosition') 
     $(position).find('.timelineTrigger').addClass('currentPosition'); 
    } 
}); 

演示:Fiddle


另一種方法:Fiddle

+0

謝謝阿倫。我會採用你推薦的第二種方法。 –