Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery选择单个标记类onclick_Javascript_Jquery - Fatal编程技术网

Javascript jquery选择单个标记类onclick

Javascript jquery选择单个标记类onclick,javascript,jquery,Javascript,Jquery,看起来有点琐碎,但我很难解决它,我有一个jquery函数来选择单击时标记的类,但问题是它也会按结构顺序选择单击的标记下面的所有其他标记,因为我只需要第一个标记 例如,如果我有 <div class="1"> <div class="2"> <div class="3"> <p class="4">Hello World</p> </div> </div> <

看起来有点琐碎,但我很难解决它,我有一个jquery函数来选择单击时标记的类,但问题是它也会按结构顺序选择单击的标记下面的所有其他标记,因为我只需要第一个标记

例如,如果我有

<div class="1">
  <div class="2">
      <div class="3">
          <p class="4">Hello World</p>
      </div>
  </div>
</div>

我知道问题正在发生,因为从技术上讲,我正在单击所有标记,以便它继续循环,但在选择第一个类后,我仍然需要一种方法来打破它,或者更好的方法是,是否有一种方法可以仅选择最顶部的对象,只需将返回添加到函数,如下所示:

$("*").dblclick(function(){
if(!$(this).hasClass("") && !$(this).hasClass("main")){
    alert($(this).attr('class'));
    return false;
}
});

我会将事件传递给click函数,在完成逻辑后,使用event.stopPropagation()。这可以防止事件冒泡到父元素

$("*").dblclick(function(event){
    if(!$(this).hasClass("") && !$(this).hasClass("main")){
        alert($(this).attr('class'));
    }
    event.stopPropagation();
});

运行此示例并查看您的控制台

$(“body>div”).dblclick(function(){
log($(this.attr('class'));
});

你好,世界


您应该了解
事件冒泡
事件传播

以下是实现您所需功能的函数:

$("*").dblclick(function(e){
    if(!$(this).hasClass("") && !$(this).hasClass("main")){
        alert($(this).attr('class'));
        e.stopPropagation();
    }
});
下面是一个工作示例:

尽管将事件附加到页面上的所有标记上并不是一个好的解决方案。更好的解决方案是为应该有事件侦听的元素添加例如
id
clickable class属性

下面是另一个采用更好方法的工作示例:


下面是另一个使用jquery禁用冒泡的工作示例:

Small Case
return false老兄,谢谢你的救命恩人这么小的问题,但花了我一天的时间。我可以问你为什么选择所有的课程吗?让我根据给定的逻辑发布一个更有效的答案示例,除非htis只是出于演示原因。它不允许我发布答案,只允许通过类main进行选择,其余的则不需要示例:$(“*”).not(“.main”).dbclick(function(){alert($(this.class());});使用
event.stopPropagation()
返回false从事件句柄只需阅读
事件冒泡
事件捕获
$(this).hasClass(“”
不需要这也是一个很好的解决方案。我会回答这一点。
$("*").dblclick(function(e){
    if(!$(this).hasClass("") && !$(this).hasClass("main")){
        alert($(this).attr('class'));
        e.stopPropagation();
    }
});