2

我想根据必须从已处理元素的 ID 计算的某些条件切换一个类

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

(这将选择大约 10 个列表元素。如果需要突出显示,我需要查找每个元素的 ID。)

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

我可能在closure-hell 中迷路了,但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() 不是我一直在寻找的功能。请参阅接受的答案以了解正确用法。

4

1 回答 1

4

首先,$(".centre li").toggleClass("highlight", someFunction(x));不是正确的语法。第二个参数是switch,定义如下,

switch 一个布尔值,用于确定是应该添加还是删除该类。

switch 不能像你一样成为一个函数。

在您的情况下,您将不得不调用.removeClass('highlight'),然后addClass您可以在其中比较元素的 ID 并返回突出显示或''。

请参阅每 1.5 秒随机突出显示 2 li 的 DEMO。

演示

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

我想我这次理解正确。见下文,

演示

$(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");

突出显示将仅添加到过滤器返回的那些元素。

于 2012-04-06T18:03:45.817 回答