Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
如何使用jquery和css:not()选择器定位除一个之外的所有标记_Jquery_Jquery Selectors - Fatal编程技术网

如何使用jquery和css:not()选择器定位除一个之外的所有标记

如何使用jquery和css:not()选择器定位除一个之外的所有标记,jquery,jquery-selectors,Jquery,Jquery Selectors,我想捕捉所有点击事件,除非它们是在a标签上完成的 我制作这把小提琴来显示我的问题: 为什么这不起作用 $('.three').on('click',':not(a)',function(e){ $('body').append('<b>i did not click on a a-tag!</b><br>'); e.preventDefault(); e.stopPropagation(); }); html: 将代码更改为此,注意

我想捕捉所有点击事件,除非它们是在a标签上完成的

我制作这把小提琴来显示我的问题:

为什么这不起作用

$('.three').on('click',':not(a)',function(e){
    $('body').append('<b>i did not click on a a-tag!</b><br>');
    e.preventDefault();
    e.stopPropagation();
});
html:


将代码更改为此,注意:not-

$('.three:not(a)').on('click',function(e){
    $('body').append('<b>i did not click on a a-tag!</b><br>');
    e.preventDefault();
    e.stopPropagation();
});

将代码更改为此,注意:not-

$('.three:not(a)').on('click',function(e){
    $('body').append('<b>i did not click on a a-tag!</b><br>');
    e.preventDefault();
    e.stopPropagation();
});

您需要检查单击事件的来源:

$('div.three').on('click',function(e){    
    if (e.target.tagName.toLowerCase() == 'a') return;
    $('body').append('<b>i did not click on a a-tag!</b><br>');
    e.preventDefault();
    e.stopPropagation();
});​

您需要检查单击事件的来源:

$('div.three').on('click',function(e){    
    if (e.target.tagName.toLowerCase() == 'a') return;
    $('body').append('<b>i did not click on a a-tag!</b><br>');
    e.preventDefault();
    e.stopPropagation();
});​
我添加了以下代码:

$(".three a").click(function(e) {
    e.stopPropagation();
});​
请参见此处:

我添加了以下代码:

$(".three a").click(function(e) {
    e.stopPropagation();
});​


请参见此处:

其目的是通过减少事件侦听器的数量来提高脚本的性能。对于你的例子,我会使用许多侦听器。它使用一个侦听器-单击处理程序。你在最初的帖子中没有提到这一点,你问为什么你所做的不起作用。这个片段并没有改变问题,事实上它确实起了作用。如果你点击。原来的三个,什么都不会发生。移动:not选择器使.3可供单击。这很微妙,但您必须单击紫红色的div才能看到差异。其目的是通过减少事件侦听器的数量来提高脚本的性能。对于你的例子,我会使用许多侦听器。它使用一个侦听器-单击处理程序。你在最初的帖子中没有提到这一点,你问为什么你所做的不起作用。这个片段并没有改变问题,事实上它确实起了作用。如果你点击。原来的三个,什么都不会发生。移动:not选择器使.3可供单击。这是微妙的,但你必须点击紫红色的div才能看到@broading的区别。我想问题是:为什么这是必要的?改变:nota改为a效果很好,尽管是相反的。这似乎是jQuery中的某种错误。$'.three'。单击,'*',函数E{更好的是,这样你可以保持授权,而不仅仅局限于DIVelement@Eric这是正常行为,如果单击的元素是“a”元素,则不执行任何操作。此“a”元素的父元素将拦截单击事件。@a上的href标记没有隐式的单击处理程序吗?在我看来,似乎有:nota,然后单击a的效果应该与完全没有单击处理程序的效果相同。@Eric这不是一个真正的隐式单击事件,它是href属性的本机行为,总是在所有鼠标事件之后触发。在这种情况下,我怀疑从父div生成的e.stopPropagation会禁用href行为,尽管我对它没有完全的信心这个肯定。我想问题变成了:为什么这是必要的?将:nota改为a很好,尽管相反。这似乎是jQuery中的某种错误。$'.three'。单击,'*',函数E{更好的是,这样你可以保持授权,而不仅仅局限于DIVelement@Eric这是正常行为,如果单击的元素是“a”元素,则不执行任何操作。此“a”元素的父元素将拦截单击事件。@a上的href标记没有隐式的单击处理程序吗?在我看来,似乎有:nota,然后单击a的效果应该与完全没有单击处理程序的效果相同。@Eric这不是一个真正的隐式单击事件,它是href属性的本机行为,总是在所有鼠标事件之后触发。在这种情况下,我怀疑从父div生成的e.stopPropagation会禁用href行为,尽管我对它没有完全的信心此确认。$'.three'。on'click',':nota'基本上您跳过了'A'标记上的click事件,但没有停止传播到父元素,然后父元素将触发click事件。preventDefault确实阻止了href的执行。但我仍然不明白:为什么我不能用:not…?没有:not it w来过滤传入事件Works正如我所期望的:$'.three'。在'click'上,':nota'基本上你跳过了'A'标记上的click事件,但是没有停止传播到父元素,然后触发click事件。preventDefault确实阻止了href的执行。但是我仍然不明白:为什么我不能用:not…?没有:no来过滤传入事件t如我所料: