2010-04-22 14 views
11

Ich versuche, dynamisch und eine Verknüpfung zu einem Bild, aber ich kann nicht richtig feststellen, ist der übergeordnete Link bereits vorhanden. DiesejQuery - Wie ermittelt man, ob ein Elternelement existiert?

ist, was ich habe,

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

Wo Element mein img Element und Link verweist, bezieht sich auf die URL zu verwenden.

Jedes Mal, wenn der Code ausgeführt wird, wird die else-Klausel ausgeführt, unabhängig davon, ob das img-Tag in ein a-Tag eingeschlossen ist oder nicht.

Kann jemand sehen, was ich falsch mache?

Jeder Ratschlag geschätzt.

Danke.

Antwort

32

Die sollten erste Zeile sein:

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

'if (Element. parent ('a'). length) 'ohne die'> 0 'ist ausreichend, da eine Zahl größer als 0 standardmäßig auf tr gesetzt wird Ue. – PhysX

+18

Ja, aber die Verwendung von> 0 macht den Code lesbarer und offensichtlicher, und die Lesbarkeit geht vor der Kürze. – RoToRa

+1

@PhysX Wir treffen uns wieder – DarkBee

0

Ihr Code wird als Aufruf an element.parent mit dem Argument 'a'.length geparst.
Es entspricht daher element.parent(1), die ein ungültiger Aufruf ist.

Sie müssen die Länge des jQuery-Objekt zu erhalten, indem .length nach dem ), wie diese bewegen:

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

Auch das wird nicht funktionieren, wenn element in einem anderen Tag eingebettet ist, die sich in einem ist <a> tag.
Sie könnten stattdessen closest anrufen.

5

Angenommen element ist eigentlich ein jQuery Objekt:

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

Wenn element ist ein DOM Knoten:

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

@cletus dominiert die Arena. +1 –

Verwandte Themen