-1

我没有前进,所以我需要你的帮助。

这是 wordpress 的三重嵌套菜单。它看起来像这样:

<ul class="sub-menu">
    <li><a href="#">Link</a></li>
    <li><a href="#" class="has_children">Link with children</a>
        <ul class="sub-menu">
            <li><a href="#">Link</a></li>
            <li><a href="#" class="has_children">Link with children</a>
                 <ul class="sub-menu">
                    <li><a href="#">Link</a></li>
                    <li><a href="#">Link</a></li>
                </ul> 
            </li>
         </ul>
    </li>
</ul>     

我想为has_children每个具有ul.sub-menu.

我现在的代码是:

jQuery.each(jQuery('ul.sub-menu li').has('ul.sub-menu'), function() {
    jQuery('a', this).addClass('has_children');
})

这适用于第一个 ul.sub-menu li,但所有其他子链接现在都有该类has_children,即使它们没有子菜单。

编辑[解决方案]:

jQuery.each(jQuery('ul.sub-menu li').has('ul.sub-menu'), function () {
jQuery('>a', this).addClass('has_children');

})

那成功了!:) 谢谢

4

2 回答 2

1

您需要将选择器更改为仅匹配a当前中的直接,li否则它将匹配a所有级别中的所有内容。仅用于>a匹配直接a,类似于:

jQuery.each(jQuery('ul.sub-menu li').has('ul.sub-menu'), function () {
    jQuery('>a', this).addClass('has_children');
})

DEMO - 只匹配a当前的直接li


在演示中,我删除has_children了初始 HTML 中的所有类,以表明它们确实是按脚本预期添加的。

于 2013-02-01T23:04:08.480 回答
0

jsFiddle

HTML:

<ul class="sub-menu">
    <li><a href="#">Link</a>
    </li>
    <li><a href="#">Link with children</a>
        <ul class="sub-menu">
            <li><a href="#">Link</a>
            </li>
            <li><a href="#">Link with children</a> 
                <ul class="sub-menu">
                    <li><a href="#">Link</a>

                    </li>
                    <li><a href="#">Link</a>

                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

jQuery:

$('ul.sub-menu li').each(function () {
    if ($(this).find('ul').hasClass('sub-menu'))  $(this).find('a:first').addClass('has_children');
});
于 2013-02-01T23:09:13.847 回答