2014-03-02 159 views
0

我想检测两个元素点击:获取jQuery选择兄弟

1) class is called advancedTargeting 
2) the sibling li of the li that has the `area` attribute. 

例如第二需求:

<li area style='display:block'>bla</li> 
<li>123</li> 
<li>356</li> 

所以我要赶在同级里的点击的李区。在这个例子中,我想要获得关于li的onclick,他的文本是:123

<li area style='display:block'>bla</li> 
<li>356</li> 

(在这个例子中,点击356立)..

他们应该是相同的功能。

我觉得应该这样做:

$('.advancedTargeting, li[area]:next').live('click', function() { 

}); 
+1

顺便说一句,你应该看看使用HTML5的'数据'的属性,而不是来了你自己。 ref:http://ejohn.org/blog/html-5-data-attributes/ –

回答

1

这里是siblings选择,你所需要的。

$('.advancedTargeting, li[area] ~ li').live('click', function() { 

}); 
+0

但这会让我点击advancedTargeting类的兄弟姐妹。不是吗? –

+1

我得到了什么是你的问题,尝试分离事件绑定(请参阅编辑的答案)。 –

0

我建议:

$('li[area]').next().on('click', function(){ 
    // click handling here 
}); 

虽然最好能够使用,有效的,HTML 5个data-*属性,而不是您的无效自创的属性。

顺便说一下,live()在jQuery 1.7中被弃用(替换为on()),并在jQuery 1.9中被删除;并在jQuery < = 1.7 delegate()被推荐,在文档中,更有效率/性能。

参考文献:

1
$('.advancedTargeting, li[area] + li').on('click', function(){ 
    var number = $(this).text(); 
}); 
0
$('.advancedTargeting li[area]:next').live('click', function() { 
... 
}); 

OR

$('.advancedTargeting li[area]:next').click(function() { 
... 
}); 
+0

没有':next'选择器 –

1

要选择的li第一个侧边具有属性area简单地使用siblings selector结合:first selector

$('.advancedTargeting li[area]').siblings().filter(":first") 

要添加点击功能:

$('.advancedTargeting li[area]').siblings().filter(':first').on('click',function(){ 
//code goes here... 
}) 

jsfiddle demo