问题描述
如何将类添加到具有子<li>
元素的<ul>
元素中。我发现jQuery中有很多示例,而Javascript中没有。我想在纯Java脚本中进行性能优化。代码如下:预先感谢!
<nav id="navigation">
<li><a href="#">Home</a></li>
<li> <!-- >>> I want to add a class to this <li> element as it has a <ul> child element -->
<a href="#">Services</a>
<ul>
<li><a href="">Graphic Designing</a></li>
<li><a href="">Web Designing</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
</nav>
解决方法
我认为您需要这样的东西
// -------- vanilla js
document.querySelectorAll('li').forEach((el) => {
if(el.querySelector('ul')) el.classList.add('theClassNameYouNeed');
});
// -------- jQuery (just to see the difference) :)
$('li').each(function() {
const el = $(this);
if(el.find('ul').length) el.addClass('theClassNameYouNeed');
});
有用的资源从jQuery转移到纯Javascript(香草):
- http://youmightnotneedjquery.com/
- https://tobiasahlin.com/blog/move-from-jquery-to-vanilla-javascript/
- https://gist.github.com/joyrexus/7307312
document.querySelectorAll('li').forEach((el) => {
if(el.querySelector('ul')) el.classList.add('theClassNameYouNeed');
});
.theClassNameYouNeed {
background: green;
}
<li><a href="#">Home</a></li>
<li>
<a href="#">Services</a>
<ul>
<li><a href="">Graphic Designing</a></li>
<li><a href="">Web Designing</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
,
这是将类添加到li
作为子元素的ul
元素中的一种可能方式
const liElem = document.querySelectorAll("li")
liElem.forEach(elem => {
if(elem.querySelector("ul")) {
elem.classList.add("new-class");
}
})
.new-class {
color: red;
background: #ececec
}
<li><a href="#">Home</a></li>
<li>
<a href="#">Services</a>
<ul>
<li><a href="">Graphic Designing</a></li>
<li><a href="">Web Designing</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
,
您可以仅在场外JavaScript
下通过两种方法执行此操作。
这里是一种简单的direct
解决方案,用于将类添加到其中具有li
的{{1}}中。这将选择DOM中的第一个ul
,然后使用classList和add方法将类应用于它。
实时演示:
li > ul
window.addEventListener('DOMContentLoaded',(event) => {
let getLiUL = document.querySelector('li > ul')
getLiUL.parentElement.classList.add('foo')
});
.foo {
background: green;
}
这是使用<nav>
<li><a href="#">Home</a></li>
<li>I want to add a class to this element as it has a child element
<a href="#">Services</a>
<ul>
<li><a href="">Graphic Designing</a></li>
<li><a href="">Web Designing</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
</nav>
方法和querySelectorAll
循环的解决方案。这会遍历forEach
中的所有li
,并将类应用于唯一以DOM
作为孩子的li
。
实时演示:
ul
window.addEventListener('DOMContentLoaded',(event) => {
let getLiUL = document.querySelectorAll('li')
getLiUL.forEach(function(e) {
e.querySelector('ul') ? e.classList.add('foo') : " "
})
});
.foo {
background: green;
}
参考:
,演示代码段
const liElems = document.querySelectorAll('li');
liElems.forEach((elem) => {
const childrenElems = elem.querySelectorAll('ul')
if(childrenElems.length > 0){
elem.setAttribute("class","democlass")
}
});
<html>
<head></head>
<body>
<li><a href="#">Home</a></li>
<li>
<a href="#">Services</a>
<ul>
<li><a href="">Graphic Designing</a></li>
<li><a href="">Web Designing</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
<script src="script.js"></script>
<body>
</html>