Как определить, существует ли родительский элемент? - PullRequest
12 голосов
/ 22 апреля 2010

Я пытаюсь создать динамическую ссылку на изображение, но не могу правильно определить, родительская ссылка уже существует.

Это то, что у меня есть,

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

Где элемент ссылается на мой элемент img, а ссылка ссылается на URL для использования.

Каждый раз, когда выполняется код, выполняется условие else, независимо от того, заключен ли тег img в тег.

Кто-нибудь может увидеть, что я делаю не так?

Любой совет приветствуется.

Спасибо.

Ответы [ 3 ]

33 голосов
/ 22 апреля 2010

Первая строка должна быть:

if (element.parent('a').length > 0)
5 голосов
/ 22 апреля 2010

Предполагается, что element на самом деле является объектом jQuery:

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

Если element является узлом DOM:

if (!$(element).parent().is("a")) {
  $(element).wrap("<a>")
}  
$(element).parent().attr("href", link);
0 голосов
/ 22 апреля 2010

Ваш код анализируется как вызов element.parent с аргументом 'a'.length.
Поэтому он эквивалентен element.parent(1), что является недопустимым вызовом.

Вам нужно получить длину объекта jQuery, переместив .length после ), например:

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

Кроме того, это не будет работать, если element вложено в другой тег, который сам находится в теге <a>.
Возможно, вы захотите позвонить closest.

...