2012-07-26 19 views
10

Quiero que cierta acción que se asocia al evento click de la etiqueta de anclaje siempre que su href atributo:a: no (d: no ([href])) Selector

  • no se inicia con mailto: y
  • no termina con # y
  • está presente con cualquier valor incluyendo vacío

así que estaba tratando este código:

<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> 

Y no funcionó. Pero para mi consternación esto funciona:

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

Pero no entiendo cómo. Observe el interior :not(). Como entiendo, el [href] significa que no hay ningún atributo href. o es lo opuesto?

¿Alguien podría llevarme a la luz?

Respuesta

9

[href] significa que hay un atributo href sin importar el valor que tenga, si es que tiene alguno.

Como pimvdb señaló correctamente, podría utilizar

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

que significa "todos unos elementos con cualquier atributo href, excepto aquellos cuyo atributo href comienza con mailto: o termina con #

+3

Verdadero , él puede querer un [href]: no (...) en su lugar. – pimvdb

+0

también hay href = "javascript: void (0)" – Toolkit

Cuestiones relacionadas