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

标签 javascript jquery submenu

我在 stackoverflow 上四处查看,但只找到了一种用 jQuery 做我想做的事情的方法。我找到的代码是这样的:

$("li:has(ul)").each(function(){
    $(this).find(">a").addClass("hasSubmenu");
});

现在我想将其转换为纯 Javascript。所以我不需要为这段简短的代码包含 jQuery 库。

有人可以帮我把它变成 JS 代码吗?

最佳答案

我看到这里有两个答案。在现代浏览器中,您可以使用 querySelectorquerySelectorAll 方法来执行类似于 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";
    }
}

如果你必须支持 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";
        }
    }
}

这是一个包含两者的 jsFiddle:http://jsfiddle.net/ppxcy/1/

关于javascript - 将子菜单指示器添加到 li 项目纯 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056256/

相关文章:

php - 如何在 WordPress 中使用 wp_get_nav_menu_items 生成自定义菜单/子菜单系统?

javascript - 使用 jQuery 调用函数时维护 'this'

javascript - 如何访问嵌套数组/对象并过滤数组的非空元素,如 NaN,null,0

node.js - 为什么每个人都使用 Node.js 和 NPM 来编译 JavaScript 库?

javascript - 渐进增强——不使用 CSS 隐藏元素

javascript - jQuery datatables-如何在表中搜索具有 html 标签的列中的文本?

Jquery:仅显示子 LI 设置为 class = active 的 UL

JavaScript 匿名函数有效语法防止全局范围污染?

c# - jqGrid subGridRowExpanded 功能无法正常工作

html - 悬停时将其他菜单向右移动时的菜单