2012-04-06 46 views
2

toggle a class基於一些條件,我有從經處理的元件的ID來計算:的jquery toggleClass() - 訪問所選元素

$(".centre li").toggleClass("highlight", someFunction(x)); 

(這將選擇約10列表元素。我需要每個元素的ID來查找是否需要突出與否。)

someFunction(selectedElement) { 
    if (selectedElement.id in someArray) 
    return true 
    else 
    return false 
} 

我可能有失去了我的方式關閉地獄,但在this函數被設置爲另一個元素。這纔是真正的代碼:

... 
showListItem = function(linkSelector, listSelectors, contentSelector) { 
return function() { 
    $(".centre li").toggleClass("backgroundFullOrange", test(this)); 
    function test(a) { 
     console.log($(a).attr("id")); // -> id of the linkSelector-element 
    } 
} 
}; 
$(linkSelector).bind('click', showListItem(linkSelector, listSelectors, contentSelector)) 
... 

更新:原來,toggleClass()不是我一直在尋找的功能。查看正確使用的接受答案。

+0

有一個'if'語句,只有**返回'true'或'false'是不必要的。您在someArray'子句中的selectedElement.id將返回一個布爾值,所以只需返回該值即可。 – 2012-04-06 18:16:08

+0

@Anthony - 我知道。只是覺得爲你們閱讀起來更容易。這是僞代碼畢竟:) – 2012-04-06 18:23:14

回答

4

首先,$(".centre li").toggleClass("highlight", someFunction(x));不是正確的語法。所述第二arg是switch和的定義如下,

交換機switchA布爾值,以確定該類是否應添加 或移除。

切換不能像您一樣具有功能。

在你的情況下,你將不得不打電話.removeClass('highlight'),然後addClass其中你可以比較元素的ID和返回高亮或''。

查看每1.5秒隨機突出顯示2 li的DEMO。

DEMO

$(".centre li") 
     .removeClass('highlight') 
     .addClass(function() { 
      return ($.inArray(this.id, someArray) >= 0)?'highlight': ''; 
     }); 

我想我理解正確的話這個時間。見下文,

DEMO

$(function() { 
    var someArray = ['l1', 'l8']; 

    $(".centre li").toggleClass(function() { 
     return ($.inArray(this.id, someArray) >= 0)?'highlight':''; 
    }); 

}); 

嘗試使用.filter。像下面這樣,

$(".centre li").filter(function() { 
    return $.inArray(this.id, someArray); 
}).toggleClass("highlight"); 

突出顯示將只被添加到過濾器返回的那些元素。

+0

thx回答,但這並不能解決我的問題,這是獲得所選元素的過濾器的ID(請參閱更新的問題) – 2012-04-06 18:10:48

+0

@jangroth在'.filter'內部可以訪問元素的'id'。 'this'將是當前的'li'。看到我更新的答案。 – 2012-04-06 18:11:53

+0

@jangroth在傳遞給'.filter()'的函數中,您可以使用'this'來引用集合中的當前元素。 – 2012-04-06 18:12:43