【问题标题】:if data attribute is true, add class如果数据属性为真,则添加类
【发布时间】:2021-03-26 21:50:48
【问题描述】:

我希望滑块中的按钮在幻灯片可见时带有下划线。 我想我需要检查一个数据属性是否为真,然后添加类。

检查我的网页时,我在属性 > 数据集:DOMStringMap > isactiveslide: "true" 中找到了这个

我需要检查一张幻灯片是否有 isactiveslide: "true"(甚至是 data-isactiveslide: "true"),然后添加类。

我想我很接近并尝试了这两个代码:

jQuery(function () {
  if (jQuery('menu1').attr('isactiveslide') === true) {
    jQuery(this).find("#test1").addClass("underline");
  }
})

jQuery('menu1').each(function(){
    if(jQuery(this).attr('isactiveslide')==true())
        jQuery('#test1').addClass('underline');
})

编辑(在一些很棒的答案和问题之后添加)

这是从页面复制的数据属性“isactiveslide”出现的部分:

<rs-slide data-key="rs-1898" data-title="WORKS" data-in="o:0;" data-out="a:false;" class="menus works1" id="works1" data-originalindex="2" data-origindex="1" data-description="" data-sba="" data-scroll-based="false" style="overflow: hidden; height: 100%; width: 100%; z-index: 20; opacity: 1; visibility: inherit;" data-owidth="300" data-oheight="200" data-rspausetimeronce="0" data-isactiveslide="true"><

因此,下一张尚未显示的幻灯片具有 data-isactiveslide="false"。我认为,识别“真实”是我可以添加类的方法。

编辑 5 月 4 日 - 我想我现在很接近了,但它仍然不起作用。

jQuery('#slide1[data-isactiveslide="true"]')("#slide1-btn").addClass('.underline');

非常感谢任何帮助!

【问题讨论】:

  • 发布 js 和 html 会有帮助
  • @GeorgeMa 我不知道该怎么做。尴尬……
  • @Endothermic_Dragon 感谢您的链接。这对我来说很难。我想我了解如何获取该属性,但我不知道如何检查它是否属于一个 div 以便将一个类添加到另一个 div...
  • 我不确定你的意思。您是否在元素内寻找子 div?如果是这样,那么用于搜索元素的任何函数都可以工作 - querySelectorquerySelectorAllgetElementsByTagNamegetElementsByClassNamegetElementsByNamegetElementById 等。要使用它,只需执行 @ 987654332@。请注意这是如何在元素上完成的,而不是 document

标签: javascript jquery


【解决方案1】:

可以通过 css 轻松完成: 您需要找到在活动幻灯片和按钮上应用的类

rs-slide.menus[data-isactiveslide="true"] .button-class-name-here{
       text-decoration:underline!important;
}

找到您正在使用的滑块,并在该滑块的幻灯片更改事件上应用按钮上的类以进行样式设置。

【讨论】:

  • 嗨,只有 CSS 也是我在阅读时怀疑的。但是,我无法让它工作。我已经在原帖中添加了 HTML,也许可以清除一些东西?
  • @Skt 是幻灯片内的按钮,数据属性为真,还是在幻灯片外?
  • 哦,你是对的!它在幻灯片之外,在“全局图层”中,因此在所有幻灯片上都可见。
  • 根据您的帮助,我找到了另一个属性并像这样解决了它: rs-module.the-whole-slide[data-slideactive="rs-1899"] .my-button{text-装饰:下划线!重要;}谢谢!
  • 很高兴听到这个消息:)
【解决方案2】:

试试这个代码:

var $ = document.querySelectorAll.bind(document) //No need for jquery - simply import the function
$(".menu1[data-is-active-slide]").forEach((el, index) => {
  $("#test1")[index].classList.add('underline');
  $("#test1")[index].innerText = "Selected!";
  console.log(1);
})
<div class="menu1" data-is-active-slide='true'>1</div>
<div id="test1"></div>
<div class="menu1" data-is-active-slide='false'>2</div>
<div id="test1"></div>
<div class="menu1">3</div>
<div class="menu2" data-is-active-slide='false'>4</div>
<div class="menu2">5</div>
<div class="menu1" data-is-active-slide>6</div>
<div id="test1"></div>
<div class="menu2">7</div>
<div class="menu1 menu2" data-is-active-slide="true">8</div>
<div id="test1"></div>
<div class="menu1 menu2">9</div>

$ 的开头声明只是简单地定义它,因为我没有导入 jQuery。

下一部分是“乐趣”的开始。我使用$(".menu1[data-is-active-slide]") 选择所有具有menu1 类和data-is-active-slide 存在的属性的元素。然后,我只是在函数内部定义了一个动作,以证明它有效。

【讨论】:

  • 嗨,这看起来很棒。我尝试了一些,但我无法将它与现有的 HTML 结合起来。我已将其添加到原始帖子中!你怎么看?
  • 尝试在forEach之前这样做:$(".menu1[data-isactiveslide='true']")
  • 我明白了!但不幸的是,它不起作用。
  • 谢谢!这确实是一个很棒的建议。它应该工作。我很确定我做的一切都是正确的
  • 如果您能看一下 5 月 4 日的代码,我将不胜感激!我已经在原帖中添加了它,我认为它很接近; jQuery('#slide1[data-isactiveslide="true"]')("#slide1-btn").addClass('.underline');
猜你喜欢
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2015-05-16
  • 2018-04-30
相关资源
最近更新 更多