如何在没有stopPropagation方法的情况下停止事件冒泡

Sia*_*ami 2 javascript jquery event-bubbling stoppropagation

有一些像这样的HTML代码:

<ul>
    <li id='root' class='tree-node'>
      root
      <ul>
        <li class='tree-node' id='node1'>node1</li>
        <li class='tree-node' id='node2'>node2</li>
        <li class='tree-node' id='node3'>node3</li>
        <li class='tree-node' id='node4'>node4
            <ul>
                <li class='tree-node' id='node4-1' >node4-1</li>
                <li class='tree-node' id='node4-2' >node4-2</li>                    
            </ul>
        </li>
      </ul>
    </li>

<ul>
Run Code Online (Sandbox Code Playgroud)

我想将click事件绑定到具有树节点类的每个标记

并将click事件绑定到文档

这是我的代码:

$(".tree-node").click(function(e){
    console.log($(this).attr("id"));
});

$(document).click(function(e){
    console.log("document clicked!");   
});
Run Code Online (Sandbox Code Playgroud)

stopPropagation()是否有任何替代方法可以阻止事件从node4-2冒泡到其父节点?

小提琴:http://jsfiddle.net/R6ySc/

Rei*_*Wit 6

您可以使用文档单击事件并从那里处理所有内容.

$(document).click(function(e){
    console.log("document clicked!");    
    var t = $(e.target);
    if(t.attr("class") == "tree-node") {
        console.log("tree node clicked");
    }
});?
Run Code Online (Sandbox Code Playgroud)

检查这个小提琴:http://jsfiddle.net/R6ySc/3/

作为替代方案,您还可以在文档的onclick事件中指定一个选择器(请查看jQuery文档):

$(document).on("click", ".tree-node", function(e) {
    e.stopPropagation();
    console.log("tree node '" + $(this).attr("id") + "' clicked");
});?
Run Code Online (Sandbox Code Playgroud)

供参考,请查看以下评论