jeremy ricketts
Intentando ensamblar un selector jQuery bastante complejo aquí y teniendo problemas.
Esencialmente, estoy tratando de agarrar todos los anclajes que 1) no tienen un “rel” de “facebox”, y O 2) no tiene un “href” que comience con “mailto”.
Esto es lo que he estado tratando de hacer:
$('a[rel!=facebox], a[href!^="mailto"]')
Pequeñas variaciones de esto no parecen funcionar. ¿Hay alguna manera mejor de hacer esto?
Estos selectores parecen funcionar individualmente, pero no cuando se sientan consecutivamente en el mismo selector:
$('a:not([rel=facebox]), a:not([href^=mailto])')
Solución final: ¡Tenemos un ganador!
$('a:not([rel=facebox],[href^=mailto])')
Juan Sheehan
Quiere que el :no selector
$("a:not([rel=facebox],[href^=mailto])");
EDITAR: robé tu respuesta por corrección
-
Ahí vamos, ahora me siento mejor al seleccionarlo como la respuesta aceptada. Tenías razón sobre el selector :not originalmente, pero no había formulado mi pregunta correctamente.
– Jeremy Rickets
2 de marzo de 2009 a las 23:19
-
Pregunta sobre esta respuesta: ¿Por qué se necesita ^=? ¿No significa eso “no es igual” mientras que mientras tanto ya has escrito “:no?”
– usuario1477388
14/09/2012 a las 15:21
Muy bien Sr. Jeremy Ricketts. Jquery te ha estropeado la cabeza. Está tratando de encadenar la lógica del selector … algo así como jQuery encadena métodos. En su segundo selector (a[href!^="mailto"]
) estás tratando de decir… NO cosas que contienen ESTE atributo. Lo que estás diciendo es “Buscar todas las cosas que no sean mailto” y “Buscar todas las cosas que contengan mailto”. Es como los filtros de luz… si filtras la luz roja… y arrojas un filtro de luz amarilla encima… no estás filtrando la luz naranja… simplemente filtraste TODO (perdón por la extensión de la analogía) . Entonces, lo que está tratando de hacer es usar el pseudo selector: no.
Como esto – $(a:not([href^=mailto:])).whateverJqueryMethodYouWant();
EDITAR: Bueno, ahora que ha especificado la pregunta correctamente … puede hacerlo así: $(a:not([href^=mailto:] , [rel=facebox])).whateverJqueryFunctionYouWant();
shahar.nardia
¿No debería ser:
$("a:not([rel="facebox"],[href^='mailto'])");
Curiosamente, $(‘a:not([rel=facebox]’) y $(‘a:no([href^=mailto]’) funcionan bien, pero no ambos separados por una coma.
– Jeremy Rickets
2 de marzo de 2009 a las 22:58
Esto se debe a que las comas agregan el objeto después de él al objeto jQuery, seleccionando efectivamente todos menos los nodos que tienen rel=facebox y href con mailto.
– Svante Svenson
2 de marzo de 2009 a las 23:12