3

在 jquery 中,我试图找到一种方法来搜索 dom 直到找到选择器。例如。

提供了这个结构:

<span data-type="contact" data-filter="4" id="buyer-lookup" class="uneditable-input contact-lookup" data-original-title="" title="">Jeff</span>
<div class="popover">
   <div class="arrow"></div>
   <h3 class="popover-title"><strong>Jeff</strong></h3>
   <div class="popover-content">
      <address style="margin:0;"> MO<br></address>
      <a data-id="70" data-type="contact" class="pull-right edit-contact" href="#">Edit</a>
      <div class="clear"></div>
   </div>
</div>

单击“.edit-contact”时,我想向上搜索,直到找到“span.contact-lookup”。我可以使用 parent 几次来获得我想要的东西,但是有没有更简洁的方法,你可以指定 $(this).searchUpFunction('span.contact-lookup'); 所以它会从这里开始搜索,直到找到 span.contact-lookup? .prev 似乎没有搜索父母。

$('.edit-contact').click(function(){
       var filter = $(this).parent().parent().prev('span.contact-lookup').data('filter');
       alert(filter);
    });
4

2 回答 2

1

使用最近的

$('.edit-contact').click(function(){
   contactID = $(this).closest('div.popover').prev().data('contact-id');
   alert(contactID);
});
于 2013-04-30T14:19:52.863 回答
1

如果您没有关于span.contact-lookup兄弟姐妹所在祖先的任何信息,您可以使用.parents() [docs]选择所有祖先:

$(this).parents().prev('span.contact-lookup')

这将比使用效率低.closest(),因为它将遍历树直到根。

此外,如果有多个祖先有span.contact-lookup兄弟姐妹,您将选择所有这些祖先。在这种情况下,您可以使用.first()or获得最近的一个.last(),具体取决于它们被选中的顺序(顺序总是相同的,我只是不知道它是不是在我的脑海中)。


所以:如果可以,使用.closest,如果没有,.parents可能是你最好的选择(除了编写你自己的代码来遍历 DOM)。

于 2013-04-30T14:25:19.483 回答