2012-08-16 99 views
0

我有这个代码,我不能修改,我想添加一个选择器,选择(点击)其下的所有元素,直到下一次出现的主要元素。问题是它们没有嵌套,只有一个在其他下面。jQuery的选择帮助

<div class="project name">..</div> 
<div data-project-id="1987" class="sidebar_project">...</div> 
<div data-project-id="3087" class="sidebar_project">...</div> 
<div data-project-id="8903" class="sidebar_project">...</div> 
<div data-project-id="223570" class="sidebar_project">...</div> 
<div class="project name">..</div> 
<div data-project-id="1846" class="sidebar_project">...</div> 
<div data-project-id="0935" class="sidebar_project">...</div> 
<div data-project-id="84735" class="sidebar_project">...</div> 
<div class="project name">..</div> 
<div data-project-id="11135" class="sidebar_project">...</div> 

我可以轻松选择所有sidebar_projects和隐藏起来,但我希望它能够使一个按钮,点击上隐藏/显示所有sidebar_projects从它的项目名称格到下一个项目名称股利。

THx的

+1

是否'类=“项目名称”意味着这些div实际上会有不同类别的不同项目名称?你不能为他们添加一个普通的类? – nnnnnn 2012-08-16 09:53:37

回答

4

试试这个:

$('.project.name').on('click', function(e){ 
    $(this).nextUntil('.project.name', '.sidebar_project').toggle(); 
}); 

我没有测试这一点,但我认为这将是做工精细你。

更多nextUntil()看到here

+0

作品完美! – Nonyck 2012-08-16 10:29:33

0

也许有点像这样:

$('div:not(.sidebar_project)').click(function() { 
    $(this).nextUntil(':not(.sidebar_project)').toggle(); 
}); 

演示:http://jsfiddle.net/nnnnnn/6gMnr/2/

这假定上面我的意见是正确的,即标题元素穿上”没有类“项目”和“名称”,但实际上他们有不同类别的不同项目名称,因此有必要根据他们的不是拥有“sidebar_project”类。

显然与此有关的问题是,你可能有页面上的其他div的,所以我希望在你的问题中所示的div有一些含有对象中,这样你可以这样做:

var $container = $("selector for container here"); 
$container.find('div:not(.sidebar_project)').click(function() { 
    $(this).nextUntil(':not(.sidebar_project)').toggle(); 
});