2012-04-02 8 views
0

я делаю с этим plugin:jQuery.closest() дает "NULL" значение,

<table> 
<tr> 
    <td> 
    <a class="linkType1" href="google.com"> 
     Google 
    </a> 
    <span style="display: none;">Goooooooooooogle</span> 
    </td> 
</tr> 

<tr> 
    <td> 
    <a class="linkType1" href="yahoo.com"> 
     Yahoo 
    </a> 
    <span style="display: none;">Yaaaaaaaaaaaaaaho</span> 
    </td> 
</tr> 
</table> 

Как я могу выбрать closestspan из linkType1 -anchors для отображения в качестве всплывающей подсказки?

В настоящее время я делаю:

jQuery(document).ready(function() { 
    jQuery("a.linkType1").tooltip({ 
     bodyHandler: function() { 
      alert(jQuery(this).closest("span").html()); // this alert is showing `null` 
      return "hi"; // i need to setup the alerted content here 
     }, 
     showURL: false 
    }); 
}); 

ответ

4

Ваши span элементы не являются предками звеньев, так closest (который ищет совпадения для селектора на текущий элемент или его предков) не то, что вы» ищу.

Основываясь на разметке, вы можете next("span") (который будет найти следующую родственный, но только если это оболочка, она не продолжается с последующими братьями и сестрами) или, возможно, nextAll("span").first() (который будет найти первую следующий родственное это span, в случае, если вы когда-либо ставите что-то между a и span), который находит всех последующих братьев и сестер с nextAll, а затем захватывает первый из них (ближайший к ссылке) через first. Так

// If the `span` will always be the very next sibling 
alert(jQuery(this).next("span").html()); 

или

// If you may put something between the `a` and the `span` at some point 
alert(jQuery(this).nextAll("span").first().html()); 
+0

Я думаю, что слишком много голосов ... примет это через 7 минут. Спасибо T.J, вот что мне нужно. +1 – tusar

+0

Не могли бы вы заглянуть в мою другую проблему? http://stackoverflow.com/q/8937158/778687 – tusar

2

closest() находит ближайший родительский элемент. Вы ищете собрата:

jQuery(this).next("span").html() 
+0

В соответствии с API: получите первый элемент, который соответствует селектору, начиная с текущего элемента и прогрессируя через дерево DOM. – mamoo

+0

Родительский элемент или ** текущий ** элемент (если он соответствует селектору). – Tadeck

+0

+1 Не могли бы вы заглянуть в мою другую проблему? http://stackoverflow.com/q/8937158/778687 – tusar

0

$(this) имеет в виду функции bodyHandler. Попробуйте

alert(jQuery(linkType1).closest("span").html()); 

Почему бы не использовать find() вместо этого? Поскольку ближайшее() пересекает дерево DOM

+0

Это также может решить, я думаю. +1 – tusar

+0

* "' $ (this) 'относится к функции bodyHandler" * Нет, это не так. Функция обработчика тела вызывается с 'this' установленным элементом DOM (плагин, как и большинство, согласуется с тем, как работает jQuery). –

Смежные вопросы