如何使用:not()选择器单击超链接时执行操作

时间:2012-07-25 11:32:35

标签: jquery javascript-events

我希望链接上的所有点击都能执行特定操作,但mailto链接除外。我有以下代码按预期工作。它首先将该函数附加到所有链接,然后将其从mailto链接中删除:

<a href="http://www.example.com">example.com</a>
<a href="mailto:someone@www.example.com">Someone</a>

<script type="text/javascript">
    $('a').on('click', function () {
        theAction();
    });
    $('a[href^="mailto"]').off('click');
</script>

我想要相同的功能,但使用:not()选择器,因为它看起来更优雅。怎么会这样?

4 个答案:

答案 0 :(得分:5)

非常简单:

$('a:not([href^="mailto"])').on(...);

$('a').not('[href^="mailto"]').on(...);

查看文档:


如果您的网页上有很多链接,那么您肯定应该使用事件委派,正如Utkanos在his answer中所建议的那样。

答案 1 :(得分:4)

不是将事件附加到每个链接,而是委托它。这也使得过滤相当容易,哪些过滤和不过来。

$('body').on('click', 'a:not([href^=mailto])', function(evt) {...

答案 2 :(得分:1)

$('a').not('a[href^="mailto"]').on('click', function () {
        theAction();
});

答案 3 :(得分:1)

Felix解决方案很好,否则如果其他链接都是http/https协议的绝对开头,请尝试使用

$('a[href^="http"]').on('click', function () {
    theAction();
});