我有ul
个,有li
个元素。我想查看哪一个有班级.selected
。如果li
hasClass .selected
,则不执行任何操作。如果同一列表中的另一个.li
没有.selected
类,我想添加类.li-border
。在下面的代码示例中,我可以触发console.log而不是addClass。我错过了什么?谢谢!
if ($("ul.portfolio-nav li a").hasClass("selected")) {
console.log("yo");
} else {
$(this).addClass("li-border");
};
答案 0 :(得分:3)
试试这段代码:
$("ul.portfolio-nav li a").each(function(){
if ( !$(this).hasClass("selected") ) {
$(this).addClass("li-border");
};
});

.li-border{
border: 1px solid black;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class='portfolio-nav'>
<li><a href='#'>First element</a></li>
<li><a href='#' class="selected">Second and selected element</a></li>
<li><a href='#'>Third element</a></li>
</ul>
&#13;
希望这有帮助。
答案 1 :(得分:2)
:not
选择器可以解决这个问题:
$("ul.portfolio-nav li a:not(.selected)").addClass('li-border');
或者使用&#39; .not&#39;功能,as suggested by jQuery documentation:
$("ul.portfolio-nav li a").not(".selected").addClass('li-border');
答案 2 :(得分:0)
不要让自己复杂化。只需删除所有li-border类,然后将其添加到您想要匹配的一组中。
https://jsfiddle.net/da98dmgt/7/
$("ul.portfolio-nav li").click(function(){
$("ul.portfolio-nav ul li").removeClass("li-border");
$(this).siblings("li").addClass("li-border");
});
答案 3 :(得分:0)
这是一个例子。用你想要的样式替换样式应该很容易。
$(document).ready(function() {
$("#list-items li").each(function() {
if (!$(this).hasClass('selected')) {
$(this).addClass('disable');
}
});
});
li:hover,
.selected {
text-decoration: underline;
cursor: pointer;
color: black;
}
.disable {
color: gray;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<ul id="list-items">
<li>List item</li>
<li>List item</li>
<li class="selected">Selected item</li>
<li>List item</li>
</ul>