2011-06-16 9 views
27

¿Por qué no puedo hacer que esto funcione?jQuery: Si este HREF contiene

$("a").each(function() { 
    if ($(this[href$="?"]).length()) { 
     alert("Contains questionmark"); 
    } 
}); 

Ps .: Esto es solo un ejemplo simplificado, para que sea más fácil para usted obtener una visión general.

+0

$ (. "a") cada uno (function() { consola .debug ($ (this [href $ = "?"]); if ($ (this [href $ = "?"]). length()) { alert ("Contiene questionmark"); } }); – MLS

Respuesta

62

Simplemente podría seleccionar los elementos de interés.

$('a[href*="?"]').each(function() { 
    alert('Contains question mark'); 
}); 

http://jsfiddle.net/mattball/TzUN3/

Nota que estaba utilizando el attribute-ends-with selector, el código anterior utiliza el attribute-contains selector, que es lo que suena en realidad estás buscando.

+0

Ohhh ... Gracias ... :-) –

+0

@Matt - Tenga en cuenta que se requieren citas alrededor de la cadena para que coincidan en la versión actual de jQuery. – Ender

+1

@Ender según los documentos de la API, tiene razón. En la práctica, las citas no siempre son necesarias, aunque como dijiste, son necesarias aquí. –

3

No funciona porque es sintácticamente sin sentido. Simplemente no puedes hacer eso en JavaScript así.

Puede, sin embargo, usar jQuery:

if ($(this).is('[href$=?]')) 

También se puede simplemente mirar el valor "href":

if (/\?$/.test(this.href)) 
+0

Ninguna de las anteriores me da una alerta, aunque había un vínculo con un signo de interrogación en ella ... –

+0

[funciona bien para mí.] (Http://jsfiddle.net/WtXq8/) – Pointy

0

uso de este

$("a").each(function() { 
    var href=$(this).prop('href'); 
    if (href.indexOf('?') > -1) { 
     alert("Contains questionmark"); 
    } 
}); 
15
$("a").each(function() { 
    if (this.href.indexOf('?') != -1) { 
     alert("Contains questionmark"); 
    } 
}); 
+0

1 por simplicidad – jvenema

+1

Sería incluso más simple con 'this.href' en lugar del recurso innecesario a jQuery. Tampoco es realmente correcto, ya que la pregunta original parecía querer encontrar un "?" en el * final * del valor "href" (lo cual sería una cosa comprensible de hacer). – Pointy

+1

@Pointy No creo que el OP se haya dado cuenta de que está usando el selector attribute-ends-with. –

2

Junto con los puntos hechos por otros, el selector $= es el selector "ends with". Usted va a querer el selector *= (contains), así:

$('a').each(function() { 
    if ($(this).is('[href*="?"')) { 
     alert("Contains questionmark"); 
    } 
}); 

Here's a live demo ->

Como se ha señalado por Matt Ball, a menos que usted necesitará también manipular enlaces sin un signo de interrogación (que puede ser el caso, ya que se dice que su ejemplo se simplifica), sería menos código y mucho más rápido que sólo tiene que seleccionar sólo los vínculos que desea comenzar con:

$('a[href*="?"]').each(function() { 
    alert("Contains questionmark"); 
}); 
Cuestiones relacionadas