2010-04-22 14 views
11

Estoy tratando de forma dinámica y un enlace a una imagen, sin embargo, no puedo determinar correctamente si el vínculo principal ya existe.jQuery - ¿Cómo determinar si existe un elemento padre?

Esto es lo que tengo,

if (element.parent('a'.length) > 0) 
{ 
     element.parent('a').attr('href', link);    
} 
else 
{ 
     element.wrap('<a></a>'); 
     element.parent('a').attr('href', link);  
} 

Dónde elemento se refiere al elemento img y el enlace se refiere a la url de usar.

Cada vez que se ejecuta el código, se realiza la cláusula else, independientemente de si la etiqueta img está incluida en una etiqueta a.

¿Alguien puede ver lo que estoy haciendo mal?

Cualquier consejo apreciado.

Gracias.

Respuesta

32

La primera línea debe ser:

if (element.parent('a').length > 0) 
+4

'si (elemento. parent ('a'). length) 'sin el'> 0' será suficiente ya que cualquier número mayor a 0 se configurará por defecto tr ue. – PhysX

+18

Sí, pero usar '> 0' hace que el código sea más legible y más obvio de lo que es, y la legibilidad es anterior a la brevedad. – RoToRa

+1

@PhysX Nos volvemos a encontrar – DarkBee

0

Su código se analiza como una llamada a element.parent con el argumento 'a'.length. Por lo tanto, es equivalente a element.parent(1), que es una llamada no válida.

que necesita para obtener la longitud del objeto jQuery moviendo .length después de la ), así:

if (element.parent('a').length > 0) 

Además, esto no va a funcionar si element está anidado en alguna otra variable que es en sí misma en una <a> etiqueta.
En su lugar, puede llamar al closest.

5

Suponiendo element es en realidad un objeto jQuery:

if (!element.parent().is("a")) { 
    element.wrap("<a>") 
} 
element.parent().attr("href", link); 

Si element es un nodo DOM:

if (!$(element).parent().is("a")) { 
    $(element).wrap("<a>") 
} 
$(element).parent().attr("href", link); 
+0

@cletus domina la arena. +1 –

Cuestiones relacionadas