如何选择具有多个类的跨度&放置在锚和锚内,没有跨度

时间:2013-01-28 20:13:29

标签: jquery anchor html

根据我之前的帖子(How to select a span with multiple classes and placed inside an anchor?)

我按照建议的解决方案实施了它它完美无缺,直到我现在有一个额外的场景。

早先建议溶胶:

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

但是现在我还有另一个场景,我希望将一个click事件绑定到锚点而不需要任何跨度。

Anchor Def:

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

所以,我已经在这个场景的代码下面了。

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

我在这里遇到的问题是当我点击带有span的锚时...没有跨度的锚上的click事件被触发。

任何人都可以帮我解决这个问题吗? 非常感谢!!

2 个答案:

答案 0 :(得分:0)

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

e.stopPropagation();

这可以防止你的更一般的事件(即附加到所有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
   }
});

答案 1 :(得分:0)

使用带有:not选择器的:has过滤掉a span个标签

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

});

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

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

FIDDLE

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

$('a').not('a:has(.ignore_class)')