2010-04-22 2 views
11

Sto provando a dinamicamente e un collegamento a un'immagine, tuttavia non posso determinare correttamente è già esiste il collegamento genitore.jQuery - Come determinare se esiste un elemento genitore?

Questo è quello che ho,

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

Dove elemento si riferisce al mio elemento img e il collegamento si riferisce alla URL da utilizzare.

Ogni volta che il codice viene eseguito, viene eseguita la clausola else, indipendentemente dal fatto che il tag img sia o meno racchiuso in un tag.

Qualcuno può vedere cosa sto facendo male?

Qualsiasi consiglio è gradito.

Grazie.

risposta

32

La prima riga deve essere:

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

se (elemento '. parent ('a'). length) 'senza'> 0' sarà sufficiente poiché qualsiasi numero maggiore di 0 sarà impostato su tr ue. – PhysX

+18

Sì, ma l'uso di '> 0' rende il codice più leggibile e più ovvio di ciò che fa e la leggibilità va prima della brevità. – RoToRa

+1

@PhysX Ci incontriamo di nuovo – DarkBee

0

Il codice viene analizzato come una chiamata a element.parent con l'argomento 'a'.length.
È quindi equivalente a element.parent(1), che è una chiamata non valida.

è necessario per ottenere la lunghezza dell'oggetto jQuery spostando .length dopo la ), in questo modo:

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

Inoltre, questo non funzionerà se element è annidato in qualche altro tag che si è in una <a> tag.
Si consiglia di chiamare closest invece.

5

Supponendo element è in realtà un oggetto jQuery:

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

Se element è un nodo DOM:

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

@cletus domina l'arena. +1 –