首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向当前容器外的元素添加类名

向当前容器外的元素添加类名
EN

Stack Overflow用户
提问于 2022-07-13 09:30:30
回答 2查看 116关注 0票数 -1

如何根据id和/或BS属性在当前容器之外添加类名?

示例代码:

代码语言:javascript
复制
<ul class="nav">
    <li class="nav-item is-active">
       <a href="#" data-bs-target="#nav-1">Lorem Ipsum</a>
     </li>
     <li class="nav-item">
        <a href="#" data-bs-target="#nav-2">Lorem Ipsum</a>
     </li>
     <li class="nav-item">
        <a href="#" data-bs-target="#nav-3">Lorem Ipsum</a>
     </li>
</ul>

<div class="tab-content">
     <div class="tab-pane" id="nav-1">
         <p>Lorem Ipsum</p>
     </div>
     <div class="tab-pane" id="nav-2">
          <p>Lorem Ipsum</p>
     </div>
     <div class="tab-pane" id="nav-3">
           <p>Lorem Ipsum</p>
     </div>
</div>

以第一个li为例。它有is-active类,它的a有属性#nav-1。我希望能够将类名active添加到带有id="nav-1<div class="tab-pane">中。这有可能吗?

EN

回答 2

Stack Overflow用户

发布于 2022-07-13 09:47:42

代码语言:javascript
复制
var activeEl = document.querySelectorAll(".is-active")[0]; //Get active li element
var dataset = activeEl.querySelectorAll(":scope > a")[0].dataset; //Get data attributes from child a element
var div = document.getElementById(dataset.bsTarget.replace("#", "")); //Cut # from data-bs-target and get the tab-pane element by id

div.classList.add("mystyle"); //Add class
代码语言:javascript
复制
.mystyle{
  background: #000000;
  color: #FFFFFF;
}
代码语言:javascript
复制
<ul class="nav">
    <li class="nav-item is-active">
       <a href="#" data-bs-target="#nav-1">Lorem Ipsum</a>
     </li>
     <li class="nav-item">
        <a href="#" data-bs-target="#nav-2">Lorem Ipsum</a>
     </li>
     <li class="nav-item">
        <a href="#" data-bs-target="#nav-3">Lorem Ipsum</a>
     </li>
</ul>

<div class="tab-content">
     <div class="tab-pane" id="nav-1">
         <p>Lorem Ipsum</p>
     </div>
     <div class="tab-pane" id="nav-2">
          <p>Lorem Ipsum</p>
     </div>
     <div class="tab-pane" id="nav-3">
           <p>Lorem Ipsum</p>
     </div>
</div>

票数 0
EN

Stack Overflow用户

发布于 2022-07-13 09:48:25

我猜您的意思是在页面加载时,您希望在.nav-item元素中找到带有类is-active.nav-item元素,并使用其data-bs-target属性将active类添加到与data-bs-target中的selctor匹配的.tab-pane中。

如果是这样的话,您可以使用document.querySelector(".nav-item.is-active a")查找元素,然后使用它的data-bs-target属性,因为这是一个有效的CSS选择器,因此可以使用它查找相关的tab-pane元素并添加类名。

代码语言:javascript
复制
const a = document.querySelector(".nav-item.is-active a");
const selector = a?.getAttribute("data-bs-target");
if (selector) {
   document.querySelector(selector)?.classList.add("active");
}

注意那里的可选链接(?.),所以如果.nav-item.is-active没有匹配或者它的data-bs-target属性中的选择器没有匹配,那么就不会出现错误。

活生生的例子:

代码语言:javascript
复制
const a = document.querySelector(".nav-item.is-active a");
const selector = a?.getAttribute("data-bs-target");
console.log(selector);
if (selector) {
   document.querySelector(selector)?.classList.add("active");
}
代码语言:javascript
复制
.active {
    color: orange;
    font-weight: bold;
    border: 1px solid orange;
}
代码语言:javascript
复制
<ul class="nav">
    <li class="nav-item is-active">
       <a href="#" data-bs-target="#nav-1">Lorem Ipsum</a>
     </li>
     <li class="nav-item">
        <a href="#" data-bs-target="#nav-2">Lorem Ipsum</a>
     </li>
     <li class="nav-item">
        <a href="#" data-bs-target="#nav-3">Lorem Ipsum</a>
     </li>
</ul>

<div class="tab-content">
     <div class="tab-pane" id="nav-1">
         <p>Lorem Ipsum</p>
     </div>
     <div class="tab-pane" id="nav-2">
          <p>Lorem Ipsum</p>
     </div>
     <div class="tab-pane" id="nav-3">
           <p>Lorem Ipsum</p>
     </div>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72963962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档