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 が彼の回答で示唆しているように、間違いなくevent delegationを使用する必要があります。

于 2012-07-25T11:34:10.330 に答える
4

Rather than attaching the event to each and every link, delegate it. This also makes it pretty easy to filter which do and don't fire it.

$('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

http/httpsFelix ソリューションは優れています。それ以外の場合は、他のリンクがすべてプロトコルから始まる絶対的なものである場合は、単純に試してみてください

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