javascript “this” 如何处理来自 jquery 的多个选择器返回
How javascript "this" handles multiple selector returns from jquery?
我今天正在制作菜单,我偶然发现了这个奇怪的案例,带有以下 HTML:
<div id="list1">
<ul>
<li>1</li>
<li>2 - Here is a Submenu
<ul>
<li>3</li>
<li>4</li>
</ul>
</li>
</ul>
</div>
然后我使用了以下 js:
$('#list1 li').click(function(){
$('.list-item').removeClass('list-item');
$(this).addClass('list-item');
});
当我这样做时,该类将仅应用于外部<li>
,但我希望它同时应用于父LI
和子。
现在我的问题是,我如何处理这种"返回",以便将类应用于父级和子级LI
?
js 如何处理这些类型的选择器?事件是否真的运行了两次并删除了设置的最后一个类?
问题是$('#list1 li')
可以在#list
内选择两个级别的li
标记,并对这两个级别应用点击处理程序。 此外,您允许单击向上传播,因此它可能不仅仅被您单击
如果您只需要外部级别,则应使用像这样的直接子规范。 这将隔离实际安装的点击处理程序:
$("#list > ul > li")
这只会获得顶级li
标签。 而且,整个代码如下所示:
$('#list1 > ul > li').click(function(){
$('.list-item').removeClass('list-item');
$(this).addClass('list-item');
});
如果要将 removeClass 操作仅隔离到同一级别的其他 LI 标记,而不是整个文档,则可以使用如下所示的内容:
$('#list1 > ul > li').click(function(){
$(this).addClass('list-item').siblings().removeClass('list-item');
});
您的评论让我对您想要点击的 LI 标签有点困惑。 如果您实际上希望较低级别是可单击的,然后将列表项类应用于单击的级别和父 LI,则可以执行以下操作:
$('#list1 > ul > li > ul > li').click(function() {
$("#list1 .list-item").removeClass('list-item');
$(this).parents("li").add(this).addClass('list-item');
return(false); // stop event propagation
});
jQuery 是将方法应用于元素列表中的一个元素还是所有元素取决于方法。
.click()
和 .addClass()
都将应用于选择器中的所有 jQuery 对象。
在您的情况下,单击处理程序将应用于 #list
中的所有li
元素。 $(this)
适用于单击的特定li
。
但是,您已经嵌套了li
元素,这意味着当您单击内部嵌套li
时,多个单击处理程序会触发,嵌套li
及其父li
。
要防止此事件通过 dom 树传播,请在单击处理程序中放置 stopPropagation() 调用:
$('#list1 li').click(function(e){
e.stopPropagation();
$('.list-item').removeClass('list-item');
$(this).addClass('list-item');
});
您还可以从处理程序return false
,这会停止传播并阻止默认操作。 这是特定于jQuery的。
如果要添加"当前"页面样式:
$('#list1 > ul > li').on('click',function(){
$(this).addClass('list-item') //adds class to clicked item
.siblings() //find the others of the same level
.removeClass('list-item'); //remove their styles
});
- jquery返回边距为0的绝对中心
- 如何使用jquery返回php-json数组对象
- Firefox使用JQuery返回不正确的JSON
- 当jQuery返回错误时,如何在jQuery中重新发送ajax请求
- jquery返回ajax响应和用户定义的变量到函数
- 如何从ajax调用JQuery返回数据
- 单击按钮时Jquery返回到父函数
- jQuery返回prevObject..有时
- 使用String.FromCharCode时,jQuery返回未定义的结果
- jQuery返回多个函数;不起作用
- 正在读取嵌套json,jquery返回undefined
- IE使用类jquery返回相同的最后一个单选按钮值
- 在数组中循环,jQuery返回undefined
- 从php向jquery返回jsonencode错误
- .children()不适用于jquery返回的指定索引
- HTML 复选框 Click() 使用 jQuery 返回 FALSE 或 TRUE,而不是 READONLY 或 DI
- 使用 jQuery 返回除 Drupal7 表单之外的所有点击事件的消息
- 排序 Jquery 返回的 HTML 元素
- jQuery 返回空字符串作为 ID 表示
- jQuery返回所有页面已禁用,然后启用