Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将子菜单指示器添加到li项目纯javascript_Javascript_Jquery_Submenu - Fatal编程技术网

将子菜单指示器添加到li项目纯javascript

将子菜单指示器添加到li项目纯javascript,javascript,jquery,submenu,Javascript,Jquery,Submenu,我环顾了stackoverflow,但只找到了一种使用jQuery实现所需功能的方法。我找到的代码如下: $("li:has(ul)").each(function(){ $(this).find(">a").addClass("hasSubmenu"); }); 现在我想把它转换成纯Javascript。因此,我不需要为这段简短的代码包含jQuery库 有人能帮我把它转换成JS代码吗?这里有两个答案。在现代浏览器中,您可以使用querySelector和querySelecto

我环顾了stackoverflow,但只找到了一种使用jQuery实现所需功能的方法。我找到的代码如下:

$("li:has(ul)").each(function(){
    $(this).find(">a").addClass("hasSubmenu");
});
现在我想把它转换成纯Javascript。因此,我不需要为这段简短的代码包含jQuery库


有人能帮我把它转换成JS代码吗?

这里有两个答案。在现代浏览器中,您可以使用
querySelector
querySelectorAll
方法执行类似于jQuery的查询:

var ulChildrenOfLi = document.querySelectorAll('li>ul');
for (var u = 0, ulen = ulChildrenOfLi.length; u < ulen; u++) {
    var liParent = ulChildrenOfLi[u].parentElement,
        aChildOfLi = liParent.querySelector('li>a');
    if (aChildOfLi) {
        aChildOfLi.className = aChildOfLi.className.replace("hasSubmenu", '') + " hasSubmenu";
    }
}
var-ulChildrenOfLi=document.queryselectoral('li>ul');
for(变量u=0,ulen=ulChildrenOfLi.length;ua');
如果(阿奇尔多夫利){
aChildOfLi.className=aChildOfLi.className.replace(“hasSubmenu”,“”)+“hasSubmenu”;
}
}
如果您必须支持IE,您可以使用更多的代码:

var lis = document.getElementsByTagName('li');
for (var i = 0, len = lis.length; i < len; i++) {
    var li = lis[i],
        uls = li.getElementsByTagName('ul'),
        children = li.children;
    if (uls.length !== 0) {
        for (var c = 0, cl = children.length; c < cl; c++) {
            var kid = children[c];
            kid.className = kid.className.replace("hasSubmenu", '') + " hasSubmenu";
        }
    }
}
var lis=document.getElementsByTagName('li');
对于(变量i=0,len=lis.length;i

这里有一个包含这两个方面的jsFiddle:

我看到了两个答案。在现代浏览器中,您可以使用
querySelector
querySelectorAll
方法执行类似于jQuery的查询:

var ulChildrenOfLi = document.querySelectorAll('li>ul');
for (var u = 0, ulen = ulChildrenOfLi.length; u < ulen; u++) {
    var liParent = ulChildrenOfLi[u].parentElement,
        aChildOfLi = liParent.querySelector('li>a');
    if (aChildOfLi) {
        aChildOfLi.className = aChildOfLi.className.replace("hasSubmenu", '') + " hasSubmenu";
    }
}
var-ulChildrenOfLi=document.queryselectoral('li>ul');
for(变量u=0,ulen=ulChildrenOfLi.length;ua');
如果(阿奇尔多夫利){
aChildOfLi.className=aChildOfLi.className.replace(“hasSubmenu”,“”)+“hasSubmenu”;
}
}
如果您必须支持IE,您可以使用更多的代码:

var lis = document.getElementsByTagName('li');
for (var i = 0, len = lis.length; i < len; i++) {
    var li = lis[i],
        uls = li.getElementsByTagName('ul'),
        children = li.children;
    if (uls.length !== 0) {
        for (var c = 0, cl = children.length; c < cl; c++) {
            var kid = children[c];
            kid.className = kid.className.replace("hasSubmenu", '') + " hasSubmenu";
        }
    }
}
var lis=document.getElementsByTagName('li');
对于(变量i=0,len=lis.length;i
这里有一个两个都有的jsFiddle:

您可以试试这个

var nav=document.getElementById('nav'), lis=nav.getElementsByTagName('li');
for(i=0;i<lis.length;i++)
{
    if(lis[i].hasChildNodes())
    {
        var childUl=lis[i].getElementsByTagName('ul');
        if(childUl.length)
            lis[i].getElementsByTagName('a')[0].className+=" hasSubmenu";
    }
}
var nav=document.getElementById('nav'),lis=nav.getElementsByTagName('li'); 对于(i=0;i你可以试试这个

var nav=document.getElementById('nav'), lis=nav.getElementsByTagName('li');
for(i=0;i<lis.length;i++)
{
    if(lis[i].hasChildNodes())
    {
        var childUl=lis[i].getElementsByTagName('ul');
        if(childUl.length)
            lis[i].getElementsByTagName('a')[0].className+=" hasSubmenu";
    }
}
var nav=document.getElementById('nav'),lis=nav.getElementsByTagName('li');
对于(i=0;我已经想到我可以使用:
document.getElementsByTagName('li')
获取ul元素,但在JS中没有足够的经验来检查li元素是否有ul元素,然后向其添加一个类。我已经想到我可以使用:
document.getElementsByTagName('li')获取ul元素
但在JS中没有足够的经验来检查li元素是否有ul元素,而不是向其添加一个类。第二个解决方案对我来说非常适合!感谢您的回答。对于未来有此问题的访问者,我现在使用了
#item ul li a.hasSubmenu:after{content:“>”;}
显示一个项目是否有子菜单,并带有以下指示符:“>”第二个解决方案对我来说效果非常好!谢谢你的回答。对于有此问题的未来访问者,我现在使用
#item ul li a.hasSubmenu:after{content:”;}
显示一个项目是否有子菜单,并带有以下指示符:“>”这也是一个合适的解决方案,可以用来代替jQuery,谢谢。这也是一个合适的解决方案,可以用来代替jQuery,谢谢。