Pregunta del selector de jQuery. Seleccione todos los nodos que NO EMPIEZAN con (cadena)

2 minutos de lectura

avatar de usuario
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])')

  • 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

avatar de usuario
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();

avatar de usuario
shahar.nardia

¿No debería ser:

$("a:not([rel="facebox"],[href^='mailto'])");

¿Ha sido útil esta solución?