jQuery - 在foreach循环中将变量传递给.not()

时间:2016-10-16 02:56:36

标签: jquery for-loop

当我在没有变量的情况下使用以下代码时,它可以正常工作:

$( "div#bottomSelector div button" ).not( "#black" ).addClass('greyed');

但是,当用一个变量替换id并为每个变量循环时,它不会。它将greyed类应用于选择器中的所有按钮。

variants.split(",").forEach(function(each) {
  var id = '#' + each
  console.log ( id );
    $( "div#bottomSelector div button" ).not( id ).addClass('greyed');
});

此控制台日志返回以下内容:

#bamboo
#black
#white

标记是:

<div id="bottomSelector">
    <div><button id="bamboo">Bamboo</button></div>
    <div><button id="black">Black</button></div>
    <div><button id="walnut">Walnut</button></div>
    <div><button id="gold">Gold</button></div>
    <div><button id="white">White</button></div>
</div>

1 个答案:

答案 0 :(得分:3)

在循环的每次迭代中,2/3的按钮都有资格获得greyed课程。

这是因为#black#white匹配not('#bamboo')。下次,#bamboo匹配not('#black'),现在所有三个按钮都添加了greyed类。

您应该做的是确保每个元素都没有ID ID。只需链接到$().not

的来电,您就可以轻松完成此操作

这是由于逻辑等同,如果你不写出来可能会有点不明显。

!A || !B || !C === !(A && B && C)

当你想要的是什么

!A && !B && !C === !(A || B || C)

您想要的代码更像是这样的代码:

var buttons = $( "div#bottomSelector div button" );
variants.split(",").forEach(function(each) {
  var id = '#' + each
  buttons = $(buttons).not( id );
});
$(buttons).addClass('greyed');