0

我希望链接上的所有点击都执行某个操作,但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

4 回答 4

5

很简单:

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

或者

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

看看文档:


但是,如果您的页面上有很多链接,那么您绝对应该使用事件委托,正如 Utkanos 在他的回答中所建议的那样。

于 2012-07-25T11:34:10.330 回答
4

与其将事件附加到每个链接,不如委派它。这也使得过滤哪些触发和不触发它变得非常容易。

$('body').on('click', 'a:not([href^=mailto])', function(evt) {...
于 2012-07-25T11:35:30.243 回答
1
$('a').not('a[href^="mailto"]').on('click', function () {
        theAction();
});
于 2012-07-25T11:34:55.293 回答
1

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

$('a[href^="http"]').on('click', function () {
    theAction();
});
于 2012-07-25T11:35:26.013 回答