当我在没有变量的情况下使用以下代码时,它可以正常工作:
$( "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>
答案 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');