首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取css并与数据属性匹配。

提取css并与数据属性匹配。
EN

Stack Overflow用户
提问于 2017-09-23 20:05:24
回答 3查看 90关注 0票数 2

我有以下情况:

代码语言:javascript
复制
<body class="theme-blue nav-black">
  <a href="#" data-class="theme-blue">Blue theme </a>
  <a href="#" data-class="nav-black">Dark Nav</a>
  <a href="#" data-class="nav-white">Light Nav</a>
</body>

尝试编写一个脚本来匹配每个匹配的'data- class‘类中的类,从而向元素中添加一个“活动”类;

做这件事最好的方法是什么?

因此,结果应该是:

代码语言:javascript
复制
<body class="theme-blue nav-black">
  <a href="#" data-class="theme-blue" class="active">Blue theme </a>
  <a href="#" data-class="nav-black" class="active">Dark Nav</a>
  <a href="#" data-class="nav-white">Light Nav</a>
</body>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-23 20:24:16

使用 jQuery

获取主体中的类,拆分,映射到一个数据属性字符串数组,然后连接。将类active添加到所有选定的元素:

代码语言:javascript
复制
var classNames = $('body')
  .attr("class")
  .split(' ')
  .map(function(c) {
    return '[data-class="' +  c + '"]';
  })
  .join(',');
  
$(classNames).addClass('active');

console.log(classNames);
代码语言:javascript
复制
.active {
  color: red;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body class="theme-blue nav-black">
  <a href="#" data-class="theme-blue">Blue theme </a>
  <a href="#" data-class="nav-black">Dark Nav</a>
  <a href="#" data-class="nav-white">Light Nav</a>
</body>

没有 jQuery:

从正文中获取classList,并通过使用Array#slice将classList转换为数组、将类映射到数据属性字符串并与逗号连接,将其转换为字符串查询。然后使用Document#querySelectorAll获取nodeList。使用nodeList迭代NodeList#forEach,并将active类添加到每个节点。

代码语言:javascript
复制
var classNames = [].slice.call(document.querySelector('body').classList, 0).map(function(c) {
  return '[data-class="' +  c + '"]';
}).join(',');

document.querySelectorAll(classNames).forEach(function(node) {
  node.classList.add('active');
});
代码语言:javascript
复制
.active {
  color: red;
}
代码语言:javascript
复制
<body class="theme-blue nav-black">
  <a href="#" data-class="theme-blue">Blue theme </a>
  <a href="#" data-class="nav-black">Dark Nav</a>
  <a href="#" data-class="nav-white">Light Nav</a>
</body>

票数 2
EN

Stack Overflow用户

发布于 2017-09-23 20:08:02

您可以循环每个a元素,然后使用hasClass()检查body是否具有相同的类,以及是否使用了addClass()

代码语言:javascript
复制
$('a').each(function() {
  if ($('body').hasClass($(this).data('class'))) {
    $(this).addClass('active')
  }
})
代码语言:javascript
复制
.active {
  background: red;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body class="theme-blue nav-black">
  <a href="#" data-class="theme-blue">Blue theme </a>
  <a href="#" data-class="nav-black">Dark Nav</a>
  <a href="#" data-class="nav-white">Light Nav</a>
</body>

票数 2
EN

Stack Overflow用户

发布于 2017-09-23 20:08:28

代码语言:javascript
复制
var bodyClass=$("div").attr("class").split(" ");
$.map( bodyClass, function( val, i ) {
    $("a[data-class='"+val+"']").addClass('active');
});
代码语言:javascript
复制
.active{
 color:red;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="theme-blue nav-black">
  <a href="#" data-class="theme-blue" >Blue theme </a>
  <a href="#" data-class="nav-black" >Dark Nav</a>
  <a href="#" data-class="nav-white">Light Nav</a>  
</div>

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

https://stackoverflow.com/questions/46383805

复制
相关文章

相似问题

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