[英]How to Add Class Name to Element If It Has No Children
How can I add to the .parent-pages
if it has no children ( .child
).如果没有子级(
.child
),我如何添加到.parent-pages
。 For example, if you click on Fabrication & Panels, the children should show up because it has them.例如,如果您单击 Fabrication & Panels,孩子们应该会出现,因为它有它们。 But if you click on Underlayment, for example, it should take you immediately to that page.
但是,例如,如果您单击 Underlayment,它应该会立即将您带到该页面。
Here's the Codepen: https://codepen.io/elemusma/pen/gOpVvqz这是 Codepen: https://codepen.io/elemusma/pen/gOpVvqz
And here a page example: https://wordpress-324331-1213892.cloudwaysapps.com/flat-stock-coil/这里有一个页面示例: https://wordpress-324331-1213892.cloudwaysapps.com/flat-stock-coil/
HTML HTML
<div class="col-md-3 sidebar pt-5 pb-5">
<div class="col-sm-12 col-12 p-0 parent-pages activate">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/flat-stock-coil/" class="parent">Flat Stock & Coil</a>
<!-- new query for child pages -->
<div class="child-pages col-md-12 pl-lg-4">
<div class="child-links">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/flat-stock-coil/copper/" class="child">Copper</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/flat-stock-coil/painted-steel/" class="child">Painted Steel</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/flat-stock-coil/other/" class="child">Other</a>
</div>
</div>
<!-- end of new query for child pages -->
</div>
<div class="col-sm-12 col-12 p-0 parent-pages">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/fabrication-panels/" class="parent">Fabrication & Panels</a>
<!-- new query for child pages -->
<div class="child-pages col-md-12 pl-lg-4">
<div class="child-links">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/fabrication-panels/corrugated-panels/" class="child">Corrugated Panels</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/fabrication-panels/standing-seam-panels/" class="child">Standing Seam Panels</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/fabrication-panels/exposed-fastener-panels/" class="child">Exposed Fastener panels</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/fabrication-panels/wall-and-soffit-panels/" class="child">Wall and Soffit Panels</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/fabrication-panels/custom-trim-packages/" class="child">Custom Trim Packages</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/fabrication-panels/roofing-and-architectural-details/" class="child">Roofing and Architectural Details</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/fabrication-panels/gutter-downspout-and-rainware-accessories/" class="child">Gutter, Downspout, and Rainware Accessories</a>
</div>
</div>
<!-- end of new query for child pages -->
</div>
<div class="col-sm-12 col-12 p-0 parent-pages">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/rain-goods/" class="parent">Rain Goods</a>
<!-- new query for child pages -->
<div class="child-pages col-md-12 pl-lg-4">
<div class="child-links">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/rain-goods/subcategory-1/" class="child">Subcategory 1</a>
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/rain-goods/subcategory-2/" class="child">Subcategory 2</a>
</div>
</div>
<!-- end of new query for child pages -->
</div>
<div class="col-sm-12 col-12 p-0 parent-pages">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/metal-roofing-accessories/" class="parent">Metal Roofing Accessories</a>
<!-- new query for child pages -->
<div class="child-pages col-md-12 pl-lg-4">
<div class="child-links">
</div>
</div>
<!-- end of new query for child pages -->
</div>
<div class="col-sm-12 col-12 p-0 parent-pages">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/heat-cable-ice-melt/" class="parent">Heat Cable/Ice Melt</a>
<!-- new query for child pages -->
<div class="child-pages col-md-12 pl-lg-4">
<div class="child-links">
</div>
</div>
<!-- end of new query for child pages -->
</div>
<div class="col-sm-12 col-12 p-0 parent-pages">
<a href="https://wordpress-324331-1213892.cloudwaysapps.com/underlayment/" class="parent">Underlayment</a>
<!-- new query for child pages -->
<div class="child-pages col-md-12 pl-lg-4">
<div class="child-links">
</div>
</div>
<!-- end of new query for child pages -->
</div>
</div>
CSS CSS
.col-md-3.sidebar {
background: #f7f7f7;
border-radius: 4px;
}
.sidebar a.parent {
color: #94752c;
font-weight: 600;
}
.sidebar a.parent:before {
content: ">";
margin-right: 9px;
color: #b8ae97;
}
.parent-pages{
cursor: pointer;
}
.parent-pages a{
pointer-events: none;
}
.parent-pages.activate a{
pointer-events: all;
}
a.child {
display: block;
color: #b8ae97;
}
.child-links {
height: 0;
opacity: 0;
transition: .15s ease-out;
}
.parent-pages.activate .child-links {
height: 100%;
opacity: 1;
transition: 1s ease-in;
}
JavaScript JavaScript
document.querySelector('.sidebar').addEventListener("click", function(event) {
let activeTab = event.target.classList.contains("activate");
document.querySelectorAll(".parent-pages").forEach(function(panel){
panel.classList.remove("activate");
// panel.previousElementSibling.classList.remove("active");
});
if(!activeTab){
// Then show the clicked panel which is accessible as event.target
event.target.classList.add("activate");
// var panel = event.target.nextElementSibling;
// panel.style.maxHeight = panel.scrollHeight + "px";
}
})
document.querySelector('.parent-pages:first-child').classList.add('activate');
How can I add to the
.parent-pages
if it has no children (.child
)如果没有子级(
.child
),我如何添加到.parent-pages
You can check this using querySelectorAll()
like:您可以使用
querySelectorAll()
进行检查,例如:
if (!document.querySelector('.parent-pages').querySelectorAll('.child').length)
{
// Parent pages have no child element with class `.child`
document.querySelector('.parent-pages').classList.add('activate');
}
If I understood your question (which you formulated in a convoluted manner) is what you are looking for?如果我理解您的问题(您以一种令人费解的方式提出的问题)是您正在寻找的?
document.querySelectorAll('.elephant').forEach(el=> { if (.el.hasChildNodes()) { el.parentNode.classList.add('alone') } })
.parent-pages { min-height:1em; border: 5px solid grey; margin:1em; padding:.4em; }.alone { border-color: red; }
<div class="parent-pages"> <div class="elephant"> <div> bob </div> <div> paul </div> </div> </div> <div class="parent-pages"> <div class="elephant"></div> </div>
[update] You can also use element.closest() [更新] 你也可以使用 element.closest()
document.querySelectorAll('.elephant').forEach(el=> { if (.el.hasChildNodes()) { el.closest('div.parent-pages').classList.add('alone') } })
.parent-pages { min-height:1em; border: 5px solid grey; margin:1em; padding:.4em; }.alone { border-color: red; }
<div class="parent-pages"> <a href="#" class="parent">a element</a> <div class="child-pages"> <div class="child-links"> <div class="elephant"> <div> bob </div> <div> paul </div> </div> </div> </div> </div> <div class="parent-pages"> <a href="#" class="parent">b element</a> <div class="child-pages"> <div class="child-links"> <div class="elephant"></div> </div> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.