JQuery короткая рука для родителей, детей - PullRequest
3 голосов
/ 23 мая 2011

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

то есть до

//  <div> <div> <div> <ul> matched item where script is called from </ul> </div> </div> <a class="postMore">LINK</a> </div>

я использую;

$(this).parent('div').parent('div').parent('div').children('a.postMore').css('display','block');

что кажется немного громоздким. Есть ли лучший способ обработки относительных элементов?

Ответы [ 2 ]

6 голосов
/ 23 мая 2011

Существует несколько способов обхода DOM с помощью jQuery , поэтому вам просто нужно идентифицировать шаблон в вашей HTML-структуре и использовать наиболее подходящие методы.

В вашем примере это должно делать то, что вы хотите, и это обеспечивает большую гибкость.

$(this).closest('div:has(a.postMore)').find('a.postMore');

демо http://jsfiddle.net/gaby/j2Wgv/


  • .closest() пойдет вверх по DOM до тех пор, пока не найдет элементы, которые соответствует селектору, который мы передали в качестве аргумента.
  • Наш селектор - div:has(a.postMore), что означает div, который содержит ссылку с классом postMore
  • И затем мы используем .find(), чтобы достичь действительной ссылки.
2 голосов
/ 23 мая 2011

Вы можете использовать .closest(), который будет искать вверх по дереву DOM. Поэтому, если вы дадите свой div, содержащий a.postMore класс, вы можете использовать $(this).closest('class').children('a.postMore'). Документация здесь

...