简体   繁体   English

如何使用普通的纯Javascript检测Nav是否有子元素?

[英]How to detect if Nav has child element using plain Plain Javascript?

How do I detect if the nav item li has dropdown or not? 如何检测导航项目li是否有下拉列表? In the example below: 在下面的示例中:

<div id="nav">
    <ul>
        <li><a href="#">Link One</a></li>
        <li><a href="#">Link One</a> <!-- add class to this LI -->
            <ul class="dropdown">
                <li><a href="#">Link One</a></li>
                <li><a href="#">Link One</a></li>
            </ul>
        </li>
        <li><a href="#">Link One</a></li>
        <li><a href="#">Link One</a></li>
        <li><a href="#">Link One</a></li>
        <li><a href="#">Link One</a></li>
    </ul>
</div>

Important 重要

I know this is fair using jQuery - BUT I DONT WANT TO USE JQUERY. 我知道这是公平的使用jQuery - 但我不想使用JQUERY。

This is the only place where I need JS, I am developing a very clean site where no JavaScript has been used. 这是我需要JS的唯一地方,我正在开发一个非常干净的网站,没有使用任何JavaScript。 So just for the shake of this piece I don't want to use jQuery. 所以只是为了震动这篇文章我不想使用jQuery。

IE8 Compatibility is required though! 虽然IE8兼容性是必需的!

Kindly help on solving this issue using plain JavaScript. 请使用纯JavaScript帮助解决此问题。 thanks all! 谢谢大家!

IE8 compatible (but not IE7): IE8兼容(但不是IE7):

var qsa = document.querySelectorAll("#nav .dropdown"), l = qsa.length, i;
for( i=0; i<l; i++) {
    qsa[i].parentNode.className = "derp";
}

In addition to Kolink 's answer, you can do the same without using querySelectorAll by using getElementByID and getelementsByClassName (and working for IE7 too): 除了Kolink的回答,你可以使用getElementByIDgetelementsByClassName (也适用于IE7)而不使用querySelectorAll来做同样的事情:

var parent = document.getElementById("nav"),
    childs = parent.getElementsClassName("dropdown"),
    length = childs.length,
    i;

for (i = 0; i < length; i++) {
    childs[i].parentNode.className = "derp";
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM