简体   繁体   English

如果元素没有子元素,如何将 Class 名称添加到元素

[英]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 &amp; 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 &amp; 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.

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