2010-04-22 13 views
11

Próbuję dynamicznie i link do obrazu, ale nie mogę poprawnie określić, czy link macierzysty już istnieje.jQuery - Jak ustalić, czy istnieje element rodzica?

To co mam,

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

Gdzie elementem odnosi się do mojego img elementu oraz link odnosi się do adresu URL do wykorzystania.

Przy każdym uruchomieniu kodu wykonywana jest klauzula else, niezależnie od tego, czy znacznik img jest zawijany w tag.

Czy ktoś może zobaczyć, co robię źle?

Wszelkie porady są mile widziane.

Dzięki.

Odpowiedz

32

Pierwsza linia powinna być:

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

'if (elementem. parent ('a'). length) 'bez'> 0' będzie wystarczające, ponieważ każda liczba większa od 0 będzie domyślnie tr ue. – PhysX

+18

Tak, ale użycie '> 0' czyni kod bardziej czytelnym i bardziej oczywistym, co robi, a czytelność idzie przed zwięzłością. – RoToRa

+1

@PhysX Znów się spotykamy – DarkBee

0

Twój kod jest analizowany jako połączenie z element.parent z argumentem 'a'.length. Jest to równoważne element.parent(1), które jest nieprawidłowym połączeniem.

Musisz dostać długość obiektu jQuery przesuwając .length po ), tak:

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

Ponadto, to nie będzie działać, jeśli element jest zagnieżdżona w innej zmiennej, która jest się w sposób <a> tag.
Możesz zamiast tego zadzwonić pod numer closest.

5

Zakładając element jest rzeczywiście obiekt jQuery:

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

Jeśli element jest węzeł DOM:

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

@letlet dominuje na arenie. +1 –

Powiązane problemy