使用 child <div> 获取每个 <li> 并更改 <li> 的 <a> 属性

Get each <li> with child <div> and change the <li>'s <a> attribute

我正在禁用菜单中的链接并将它们变成手风琴式按钮。 有些链接没有 children(如果你愿意,可以下拉),我希望这些链接保留。

我想用 child Div 定位每个 LI 并更改 Li 的 a=href 值 我已经做到了,但我特别不想更改任何 Li 的 a=href 值,如果它首先没有 child Div。

这是我的代码:

$(window).on("resize", function() {
        $(function() {
            if ($(window).width() <= 900 & $( 'div.menu-main-menu-container > ul.main-menu > li.menu-item > a' ).attr( 'href' ) != "#") {
                $( 'div.menu-main-menu-container > ul.main-menu > li.menu-item > a' ).each(function() {
                    var old = $(this).attr( 'href' );
                    $(this).attr( 'data-href', old);
                    $(this).attr( 'href', '#');
                });
            } if ($(window).width() > 900 & $( 'div.menu-main-menu-container >     ul.main-menu > li.menu-item > a' ).attr( 'href' ) == "#") {
                $( 'div.menu-main-menu-container > ul.main-menu > li.menu-item >     a' ).each(function() {
                    var old = $(this).attr( 'data-href' );
                    $(this).attr( 'href', old);
                });
            }
        });
}).resize();

你可以这样做:

if ($('li').children().length > 0)
{
    //do something
}

或者:

if ($('li').children().length == 0)
{
    //do something else
}

此外,您似乎没有循环遍历 li(否则我会建议使用 $(this))。绝对有更好的方法来完成选择这些元素。您的选择器(即 'div.menu-main-menu-container > ul.main-menu > li.menu-item > a' )有这么长的字符串,您可以在其中简化为简单的唯一 class 或 id.

您可以使用 jQuery has 方法仅 select 带有子 div 的 li,例如:

$('div.menu-main-menu-container > ul.main-menu > li.menu-item').has('div').children('a').....

你可以选择 li 第一个元素是 div 像这样:

$('li > div:first').each(function(){
  $(this).parent('li')
  ......
});

希望对您有所帮助:)