2012-07-26 18 views
10

Ich möchte, dass eine bestimmte Aktion auf dem Click-Ereignis des Anker-Tag zugeordnet werden, wenn sein href Attribut:a: nicht (a: nicht ([href])) Selektor

  • nicht mit mailto: startet und
  • nicht mit # Ende und
  • vorhanden ist, mit einem beliebigen Wert einschließlich leeren

So war ich diesen Code versuchen:

<a href="example.com">example.com</a> 
<a href="mailto:[email protected]">Someone</a> 
<a href="thepage#">The Page</a> 
<a>This does nothing</a> 

<script type="text/javascript"> 
    $(document).on('click', 'a:not([href^="mailto\\:"], [href$="\\#"], [href])', myFunction); 
</script> 

Und es hat nicht funktioniert. Aber zu meiner Bestürzung funktioniert das:

$(document).on('click', 'a:not([href^="mailto\\:"], [href$="\\#"], a:not([href]))', myFunction); 

Aber ich verstehe nicht wie. Beachten Sie die innere :not(). Wie ich verstehe, bedeutet die [href], dass es kein href Attribut gibt. Oder ist es das Gegenteil?

Könnte mich jemand zum Licht führen?

Antwort

9

[href] bedeutet, dass es ein href-Attribut gibt, unabhängig davon, welchen Wert es hat.

Wie pimvdb richtig darauf hingewiesen, könnten Sie

a[href]:not([href^="mailto\\:"], [href$="\\#"])

verwenden Was bedeutet, „alle A-Elemente mit jedem href Attribut, mit Ausnahme derjenigen, deren Attribut href beginnt mit mailto: oder endet mit #

+3

Wahr Vielleicht möchte er stattdessen [href]: not (...). – pimvdb

+0

gibt es auch href = "javascript: void (0)" – Toolkit

Verwandte Themen