2011-09-08 56 views
3

如何匹配当前父元素之前的元素。jQuery查找先前的非祖先元素

.parents('form').closest()没有做这项工作,因为它不是祖先元素

.prev()不工作,因为它不是一个兄弟

HTML例如:

<div class="somerandomname"> 
    <div class="contents"> 
     <h3 class="title">sadois</h3> 
     <strong>strong</strong> 
     <h3 class="nottitle">osdjia</h3> 

     <div class="sod"> 
      <p class="paragraph"> 
       <a class="link1" href="#">link 1</a> 
       <a class="link2" href="#">link 2</a> 
       <a class="link3" href="#">link 1</a> 
      </p> 
     </div> 
    </div> 
</div> 

相关的js :

$('p>a').hover(function(){ 
    $(this).closest('strong').css({'background': 'red'}); 
}, function(){ 
    $(this).closest('strong').css({'background': 'transparent'}); 
}); 

jsFiddle

+1

什么是你正在讨论的'current',你想在提供的html中选择什么? –

+0

根据他的例子,他想要选择强大的时候悬停在一个链接 – Andy

回答

1

我想你必须假设你知道一些文档结构。例如:

$("strong", $(this).closest('div.container')).css({'background': 'red'}); 

我不相信有一种假设遍历的方法,因为它会上升。

2

这是你想要做什么?

$(this).closest('.sod').siblings('strong') 

http://jsfiddle.net/D3xBz/1/


,你可以这样做的还有:

$(this).closest('.contents').find('>strong') 

假设.contents DIV存在于你的实际代码

+0

这就是它,但有一种不同的方法...... HTML是完全不同的,所以我不能依靠'div.sod' – Teneff

+1

是啊,它是当问题中的代码与实际代码完全不同时很难想出解决方案 – Andy

0

尝试

$(this).closest()

这将工作在父树上,并返回最接近你想要的值。

+0

再次阅读问题:''.closest()'因为它不是祖先元素而没有执行作业“ –

+0

find()? http://api.jquery.com/find/ –

+0

'find'以相反的方式工作,它寻找后代元素。这在这种情况下也无济于事。然而,“最接近”的组合(以获得'。somerandomname'),然后'find'(获取所需的元素)*可以*工作,这取决于OP实际正在做什么。 –

1

可以使用closest()到祖先<div>元件暴露sod类匹配,则使用prevAll():last选择前述<strong>元件匹配:

$("p > a").hover(function() { 
    $(this).closest(".sod") 
      .prevAll("strong:last") 
      .css("background", "red"); 
}, function() { 
    $(this).closest(".sod") 
      .prevAll("strong:last") 
      .css("background", "transparent"); 
}); 

更新拨弄here