我希望链接上的所有点击都能执行特定操作,但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()
选择器,因为它看起来更优雅。怎么会这样?
答案 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();
});