0

根据我之前的帖子(如何选择具有多个类的跨度并放置在锚点内?)

我已经按照建议的解决方案实施了它,并且在我现在有一个额外的场景之前它工作得很好。

早些时候建议的溶胶:

 $('span.c3.c4').not('.ignore_class).parents('a').click(function (e) { alert("clicked!"); }); 

但是现在我有另一种情况,我想将点击事件绑定到锚点,而其中没有任何跨度。

锚定定义:

<a href="#">LINK_TEXT</a>

所以,我已经为这种情况准备了下面的代码。

$('a').not('.ignore_class').click(function (e) { alert("clicked!"); });

我在这里面临的问题是当我单击具有跨度的锚点时。没有跨度的锚点上的单击事件被触发。

谁能帮我解决这种情况?非常感谢!!

4

2 回答 2

0

您可能想要的是确保以正确的顺序附加事件,并在您想要优先处理的事件(更具体的事件)上,完成您的功能:

e.stopPropagation();

这将防止您的更一般的事件(即附加到 all的事件a)在您的更具体的事件被触发后触发。

或者,可能是一种更简单的方法来推理这种情况,有一个事件并测试点击了哪种链接:

$('a').click(function()
{
   if ($(this).find('span.c3.c4').not('.ignoredClass').length > 0)
   {
      // event for special links with spans in them
   }
   else
   {
      // event for normal links
   }
});
于 2013-01-28T20:18:50.400 回答
0

使用:not:has选择器过滤掉awithspan标签

$('a:not(:has(span))').click(function(){

});

然后你可以选择像这样跨度的

$('a:has(span)') // <-- you can also pass in your span class if you want

小提琴

看起来您的 .ignoreclass 处于跨度级别而不是锚点 - 使用 .not() 仅过滤当前集合中的元素,即所有锚点。所以要这样使用它,你可以这样做

$('a').not('a:has(.ignore_class)')
于 2013-01-28T21:09:20.907 回答