2011-04-04 294 views
0

首先,请原谅我,如果这是一个多余的问题。我认为你会同意这是一个难以合理搜索的案例。选择孩子的父母

我有HTML,看起来像

<li class='signature'> 
    <span class='label'>Signature:</span> 
    <div class='folding'> 
     <span class='data'></span> 
    </div> 
</li> 
<li class='issuer'> 
    <span class='label'>Issuer:</span> 
    <span class='data'></span> 
</li> 

等等等等

我想使用jQuery做一个.addClass只包含类“折叠”的DIV任何华里,但而不是其他人。我敢肯定,我可以使用巧妙的.each语句来做到这一点,但我有种直觉感觉,必须使用jQuery选择器来做到这一点。我已经得到尽可能

$('li > .moreclick').addClass("arrowable"); 

但这当然增加了类的跨度,而不是李。

我坚持一个.each? (如果是这样的话,任何关于这种做法的最好方法的提示都会很好,但不可否认,这是问题的范围)。

谢谢!

回答

2

如果li总是将成为绝对的父:

$("div.folding").parent().addClass("new-class") 

否则,这将让搜索了层次结构,直到它找到一个li

$("div.folding").closest("li").addClass("new-class") 

dioslaska的解决方案更好。尽管如此,请留在这里作为参考。

+0

您的解决方案是一个更好的解决方案。 Dioslaska的解决方案将在这里打破:http://jsfiddle.net/Svqdc/而你的将按预期工作。 – Peeter 2011-04-04 08:49:07

+0

是的,它会中断,但这不是特定的情况。例如。如果你把另一个div放在一个带有li祖先的“折叠”类中,这个解决方案也会为你添加一个不需要的类。(虽然没有攻击的解决方案,但它是完全正确的,我真的不知道哪个选择器更快) – dioslaska 2011-04-04 09:19:12

+0

啊哈,我看到了两者之间的区别。非常有用的比较,谢谢@Luke和@dioslaska。我将此作为解决方案进行检查,我必须等到html被冻结后才知道我要使用哪一个,但是我很烦恼,我还没有获得足够的业力来解决这两个问题: ) – mediapathic 2011-04-06 22:27:37

2

请尝试以下

$('li:has(.folding)').addClass("arrowable"); 

jQuery documentation

+0

你在这里做了什么和“$('li')。有”@littlealien下面的建议?有没有? – mediapathic 2011-04-06 22:33:35

0

例如:

$('.folding').parent().addClass('arrowable'); 

//编辑过慢..

+0

仍然有用。谢谢! – mediapathic 2011-04-06 22:34:27

0

尝试。

$('li').has('.folding').addClass("arrowable"); 
0

如果你想查询只有李的直接孩子:

$('li:has(> div.folding)').addClass("arrowable"); 
+0

哦,我不知道你可以用>来做这件事,这很好。谢谢。 – mediapathic 2011-04-06 22:35:23

0

请试试这个:

$("li:has(div.folding)").addClass("new-class") 

这将选择完全li元件,它的divs父有类'folding'

+0

在比较这与上述dioslaska的解决方案,我没有意识到你可以用这种方式指定div.folding。很高兴知道,谢谢! – mediapathic 2011-04-06 22:31:52