1

我有一个 dlist,如果下一个“dd ol”被隐藏,我想在其中添加一个类到“dt”。

在下面的示例中,您看到 dd.dd2 ol 是隐藏的,所以我希望上面的 dt 折叠(添加一个类)

我在 Stackoverflow 上找到了这个:Delete <dt> without <dd> with jquery

$('dt').filter(function(){
                     return !($(this).next().is('dd'));
               }).remove();

并尝试了类似的东西:

$('#someID dt').filter(function(){
                     return ($(this).next().is('dd ol').css('display') == 'none');
               }).addClass('collapsed');

HTML:

<dl id="someID">
<dt class="dt1">List1<span>&nbsp;</span></dt>
<dd class="dd1" >
<ol>
<li class="listitem1"><a href="#" title="listitem1">listitem1</a></li>
<li class="listitem2"><a href="#" title="listitem2"><span class="txt">listitem2</span></a></li>
<li class="listitem3"><a href="#" title="listitem3"><span class="icon">&nbsp;</span><span class="txt">listitem3</span></a></li>
</ol>
</dd>

<dt class="dt2">List2<span>&nbsp;</span></dt>
<dd class="dd2" >
<ol style="display: none;">
<li class="listitem1"><a href="#" title="listitem1">listitem1</a></li>
<li class="listitem2"><a href="#" title="listitem2"><span class="txt">listitem2</span></a></li>
<li class="listitem3"><a href="#" title="listitem3"><span class="icon">&nbsp;</span><span class="txt">listitem3</span></a></li>
</ol>
</dd>

<dt class="dt3">List3<span>&nbsp;</span></dt>
<dd class="dd3" >
<ol>
<li class="listitem1"><a href="#" title="listitem1">listitem1</a></li>
<li class="listitem2"><a href="#" title="listitem2"><span class="txt">listitem2</span></a></li>
<li class="listitem3"><a href="#" title="listitem3"><span class="icon">&nbsp;</span><span class="txt">listitem3</span></a></li>
</ol>
</dd>
</dl>

但它没有成功。

4

2 回答 2

1

最简单的方法是使用:hidden选择器

$('dl#someID dd ol:hidden').parent().prev('dt').addClass('collapsed');

http://jsfiddle.net/mblase75/mULNu/

于 2012-10-19T15:01:34.967 回答
1

在您的过滤器功能中试试这个:

return $(this).next().is('dd').has('ol:hidden').length > 0;
于 2012-10-19T15:02:06.143 回答