根据当前的类来更改数据元素的样式?

时间:2017-09-19 18:48:54

标签: javascript jquery

我想要做的是当data-slide-to =“1”的滑块控制点的类为“active”时,我想将.slider-overlay的背景颜色设置为gold。这就是我尝试过但它不起作用。

$(document).ready(function(){

$('.active[data-slide-to="1"]') {
    $('.slider-overlay a').css('background', 'gold')
}

});

html for slider

<div class="jumbotron">
    <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
    <ol class="carousel-indicators">
      <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
      <li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
    </ol>
    <div class="carousel-inner" role="listbox">
      <!-- Slide One - Set the background image for this slide in the line below -->
      <div class="carousel-item slide-cc active" style="background: #111">
        <div class="carousel-caption d-none d-md-block">
                </div>
      </div>
      <!-- Slide Two - Set the background image for this slide in the line below -->
      <div class="carousel-item slide-2waytray" style="background: #444">
        <div class="carousel-caption d-none d-md-block">
                </div>
      </div>
    </div>
    <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
      <span class="carousel-control-prev-icon" aria-hidden="true"></span>
      <span class="sr-only">Previous</span>
    </a>
    <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
      <span class="carousel-control-next-icon" aria-hidden="true"></span>
      <span class="sr-only">Next</span>
    </a>
  </div>

    <div class="slider-overlay">
    <h1>Welcome!</h1>
    <a href="" title="Get Started">Get Started</a>
    </div>

</div>

.slider-overlay始终在页面上停留,我只想根据哪个幻灯片处于活动状态来更改其背景颜色。

这是一个jsfiddle https://jsfiddle.net/tpbbuqjh/2/

2 个答案:

答案 0 :(得分:1)

您可以使用MutationObserver观察元素属性的变化,在变异通知中执行任务

&#13;
&#13;
let observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if (mutation.target.className === "active") {
      $(".slider-overlay a").css("background", "gold");
      return false
    }
  })
});

let target = $("li[data-slide-to='1']")[0];

let config = {attributeFilter:["class"]};

observer.observe(target, config);

setTimeout(function() {
  target.className = "active"
}, 5000)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="jumbotron">
  <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
    <ol class="carousel-indicators">
      <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
      <li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
      <li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
    </ol>
    <div class="carousel-inner" role="listbox">
      <!-- Slide One - Set the background image for this slide in the line below -->
      <div class="carousel-item slide-cc active" style="background: #111">
        <div class="carousel-caption d-none d-md-block">
        </div>
      </div>
      <!-- Slide Two - Set the background image for this slide in the line below -->
      <div class="carousel-item slide-2waytray" style="background: #444">
        <div class="carousel-caption d-none d-md-block">
        </div>
      </div>
    </div>
    <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
      <span class="carousel-control-prev-icon" aria-hidden="true"></span>
      <span class="sr-only">Previous</span>
    </a>
    <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
      <span class="carousel-control-next-icon" aria-hidden="true"></span>
      <span class="sr-only">Next</span>
    </a>
  </div>

  <div class="slider-overlay">
    <h1>Welcome!</h1>
    <a href="" title="Get Started">Get Started</a>
  </div>

</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

&#13;
&#13;
$(document).ready(function(){

if($('.active').attr('data-slide-to')=="1") {
    $('body').css('background', 'gold')
}

});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="active" data-slide-to="1"></div>
&#13;
&#13;
&#13;