javascript - $(*).click 事件单击它及其所有父级。

标签 javascript jquery

这是我的代码:

<p>
    <div>
        <div><span>Hello</span></div>
        <span>Hello Again</span>
    </div>
    <div>
        <span>And Hello Again</span>
    </div>
</p>
<b>Click Hellos to toggle their parents.</b>
<script>
    function showParents() {
        $("div").css("border-color", "white");
        var len = $("span.selected")
        .parents("div")
        .css("border", "2px red solid")
        .length;
        $("b").text("Unique div parents: " + len);
    }
    $("*").click(function () {
        $("b").text($(this).parents().length);
    });
</script>

问题是当我点击跨度时,它显示 0 而不是 3!

我认为问题是*

现在的问题是,当我不知道元素的类型时,如何获取父元素的计数?

最佳答案

问题是事件传播(冒泡)。单击事件从被单击的元素传播到文档的根,触发与这些祖先元素关联的每个单击处理程序,因此当 html 元素的单击处理程序被触发时,不再有父元素,因此您结果为 0。

演示:Fiddle - 看看控制台

相反,您可以将点击处理程序仅绑定(bind)到文档对象,然后使用事件的目标属性找到触发点击的元素并找到其父元素

$(document).click(function (e) {
    $("b").text($(e.target).parents().length);
});

演示:Fiddle

关于javascript - $(*).click 事件单击它及其所有父级。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22433116/

相关文章:

javascript - 当我用 jquery 将鼠标悬停在图像上时,如何使跨度保持不变?

javascript - 当值为法语名称时,jQuery 数据选项会 chop

javascript - 复选框的值已添加到数组中,但复选框未选中

jquery - 我的导航菜单有问题。我正在使用 Bootstrap 3、JQuery 2.3.1、Jade、ExpressJS 和 Node.js

jquery - 在 DOM 之后加载 jQuery,如何在加载 jQuery 之前使 $.ready() 可用于我的页面?

javascript - 使用 Google Maps Javascript API v3 数据层设置多个 GeoJson 文件的样式

javascript - 这是查看是否在 javascript 中使用 php 设置 2 个 cookie 的有效方法

javascript - 我如何在浏览器端有效地处理巨大的javascript数组(2000万个坐标的数组)?

javascript - 解释一下这个函数如何去除负值

javascript - 基于兄弟元素向元素添加类