2011-06-12 95 views
1

假设我有一个假设的HTML布局像这样的(假设时,我采取类似的东西,但已精简它的问题的缘故):获得元素类型

<div id='start' class='checkpoint'> 
    <ul> 
    <li><input name='need_this'/></li> 
    <li><input name='need_also'/></li> 
    <li> 
     <div id='stop' class='checkpoint'> 
     <ul> 
      <li><input name='ignore_this' /></li> 
     </ul> 
     </div> 
    <li> 
     <div> 
     <div><input name='need_again' /></div> 
     </div> 
    </li> 
    </ul> 
    <input name='need_aswell' /> 
</div> 

我想以$('#start')开始,除非它们存在于一个新的检查点类中,否则要获得具有“name”属性的所有元素。虽然我熟悉.find()和.nextUntil(),但我的理解是,当这些通过html逐步阅读,并且一旦中途通过“检查点”类就会停下来停止。我想搜索任何“.checkpoint”元素,直到#start div结束。

如果有人能为我指出正确的方法,将不胜感激? (这可能是一些jQuery的情况我不熟悉)

回答

3

这应做到:

$('#start [name]').not('#start .checkpoint [name]') 

虽然我不知道如何有效的,这是...


旁注:input元素应在<form> s内。

+0

令人印象深刻。 – MacMac 2011-06-13 00:03:56

+0

嗨费利克斯 - 谢谢,效果很好。也许我还会问,为了多功能性,如何在插件上下文中使用“this”而不是字符串中元素的id来编写这些内容? (特别是,我不确定如何重写not()子句以适应'this') – girlafraid 2011-06-13 01:09:40

+0

@girlafraid:我猜它会像'this.find('[name]')。not(this。 find('。checkpoint [name]'))' – 2011-06-13 02:01:04

0

这是我能想到的与你的HTML代码的唯一的事情:

$('#start').find('input[name]').each(function() 
{  
    if(!$(this).parents('div[id!=start]').hasClass('checkpoint')) 
    { 
     $(this).css('background-color', 'green'); 
    } 
}); 

演示在jsFiddle