我发现自己经常这样做:
$(document).on("click","li",function(){
$(".selected").removeClass("selected"); // Remove any old selected
$(this).addClass("selected"); // Apply selected to this element
});
有没有更好的方法来执行这样的任务,例如切换一个类。顺便说一下,每次只能选择一个元素。
谢谢。
我发现自己经常这样做:
$(document).on("click","li",function(){
$(".selected").removeClass("selected"); // Remove any old selected
$(this).addClass("selected"); // Apply selected to this element
});
var $selected = null;
$(document).on("click", "li", function() {
if ($selected) {
$selected.removeClass('selected');
}
$selected = $(this).addClass('selected');
});
selected
类的函数,它就可以起作用。$selected
变量。document
作为委托的锚点不是最佳实践。最好选择最近不会从文档中移除的节点。var $selected = $();
$(document).on("click", "li", function() {
$selected.removeClass('selected');
$selected = $(this).addClass('selected');
});
$()
的使用能力是在 1.4 版本中引入的;在此之前,您需要使用 $([])
。
var $selected = $([])
,然后移除if语句。 - Kevin B$('.selected', myListWithOneOption)
代替 $('.selected')
。这样搜索更快,少了些“亚优化”。 - TecHunter<script>
$(document).ready(function(){
$(this).on("click", "li", function() {
$(this).addClass('selected').siblings().removeClass('selected');
});
});
</script>
<li>
不是动态添加的,并且它们都是兄弟节点时,此方法才有效。(这是常见情况,但不是唯一可能的情况。) - cHao<li>
在单击<li>
时的位置)。 - cHao.siblings()
每次都会重新计算。 - Ja͢ckvar $liElements = $('#yourContainer > li');
$(document).on("click","li",function(){
$liElements.not($(this)).removeClass("selected");
$(this).addClass("selected");
});
var lis = document.getElementsByTagName('li');
。返回值是实时的,这意味着任何添加到文档中的<li>
元素也会神奇地出现在列表中。 - cHao跟踪当前元素的概念与其他答案相同,但您可以将此逻辑整洁地封装在函数中,例如
function class_swapper=function(cls){
var cur;
return function(elt){
if (cur) { cur.classList.remove(cls); }
elt.classList.add(cls);
cur=elt;
};
};
调用 class_swapper
函数会返回一个函数,用于将指定的类应用到特定元素(并从先前的元素中删除该类,该元素在函数内部被记住)。您可以按以下方式使用它:
var swapper=class_swapper("selected");
swapper(elt1);
swapper(elt2);
$(document).on("click","li",function(){swapper(this);});
我使用了classList.add
和classList.remove
,这是在现代浏览器中操作类的一种优雅的方式(哎呀),但当然可以根据需要用jQuery的addClass
等来替换。
在与杰克辩论后,我提出我的建议。 假设你的列表在这里:
var $myList = $('#list');
然后:
$myList.on("click","li",function(){
$(".selected",$myList).removeClass("selected"); // Remove any old selected
$(this).addClass("selected"); // Apply selected to this element
});
或者
$myList.on("click","li",function(){
$(this).siblings(".selected").removeClass("selected"); // Remove any old selected
$(this).addClass("selected"); // Apply selected to this element
});
selected
元素。据我所知,当我们提供上下文时,搜索会更快。