Как правильно изменить div css, используя toogleClass? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь использовать toogleClass, но, хм, кажется, я не совсем понимаю, как это работает. Может кто-нибудь сказать мне, как сделать этот текст зеленым, когда слайдер включен, и изменить на красный, когда он выключен?

Я подготовил демо (игнорировать слайдер css):

$(document).ready(function() {
  $("#rulerSlider").click(function() {
    $("#one").toggleClass("#two");
  });
});
#one {
  color: green
}

#two {
  color: red
}



/* slider */
.slider {
  bottom: 350px;
  left: 300px;
  width: 80px;
  height: 26px;
  background: #333;
  /*margin: 20px auto;*/
  margin-left: 35px;
  position: absolute;
  border-radius: 50px;
  box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), 0px 1px 0px rgba(255, 255, 255, 0.2);
}

.slider:after {
  content: 'OFF';
  color: #000;
  position: absolute;
  right: 10px;
  bottom: 0px;
  z-index: 0;
  font: 12px/26px Arial, sans-serif;
  font-weight: bold;
  text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.15);
}

.slider:before {
  content: 'ON';
  color: #3bb100;
  position: absolute;
  left: 10px;
  top: 1px;
  z-index: 0;
  font: 12px/26px Arial, sans-serif;
  font-weight: bold;
}

.slider label {
  display: block;
  width: 34px;
  height: 20px;
  cursor: pointer;
  position: absolute;
  top: 3px;
  left: 3px;
  z-index: 1;
  background: #fcfff4;
  background: linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
  border-radius: 50px;
  transition: all 0.4s ease;
  box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);
}

.slider input[type=checkbox] {
  visibility: hidden;
}

.slider input[type=checkbox]:checked+label {
  left: 43px;
}

/* end slider */
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="one">
  stackoverflow
</div>

<div>
  <div class="slider">
    <input type="checkbox" value="None" id="rulerSlider" name="check" checked />
    <label for="rulerSlider"></label>
  </div>
</div>

Я сделал что-то подобное, но, кажется, я делаю что-то совершенно не так. У меня плохо с css Может кто-нибудь объяснить, как это сделать?

Ответы [ 4 ]

3 голосов
/ 08 января 2020

Вам нужно добавить класс вместо ID:

$(document).ready(function() {
  $("#rulerSlider").click(function() {
    $("#one").toggleClass("two");
  });
});
#one {
  color: green
}

#one.two {
  color: red
}

/* slider */
.slider {
  bottom: 350px;
  left: 300px;
  width: 80px;
  height: 26px;
  background: #333;
  /*margin: 20px auto;*/
  margin-left: 35px;
  position: absolute;
  border-radius: 50px;
  box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), 0px 1px 0px rgba(255, 255, 255, 0.2);
}

.slider:after {
  content: 'OFF';
  color: #000;
  position: absolute;
  right: 10px;
  bottom: 0px;
  z-index: 0;
  font: 12px/26px Arial, sans-serif;
  font-weight: bold;
  text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.15);
}

.slider:before {
  content: 'ON';
  color: #3bb100;
  position: absolute;
  left: 10px;
  top: 1px;
  z-index: 0;
  font: 12px/26px Arial, sans-serif;
  font-weight: bold;
}

.slider label {
  display: block;
  width: 34px;
  height: 20px;
  cursor: pointer;
  position: absolute;
  top: 3px;
  left: 3px;
  z-index: 1;
  background: #fcfff4;
  background: linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
  border-radius: 50px;
  transition: all 0.4s ease;
  box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);
}

.slider input[type=checkbox] {
  visibility: hidden;
}

.slider input[type=checkbox]:checked+label {
  left: 43px;
}

/* end slider */
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="one">
  stackoverflow
</div>
<div>
  <div class="slider">
    <input type="checkbox" value="None" id="rulerSlider" name="check" checked />
    <label for="rulerSlider"></label>
  </div>
</div>
1 голос
/ 08 января 2020
$('#rulerSlider').click(function(e){
    $("#one").toggleClass("two");
});

Если вы хотите sh поменять местами два разных класса, ваш код потребует больше логи c:

$('#rulerSlider').click(function(e){

  if ( $("#one").hasClass( 'two' ) ) {
   $("#one").removeClass( 'two' ).addClass( 'one' )
} else {
    $("#one").removeClass( 'one' ).addClass( 'two' )
}

});

1 голос
/ 08 января 2020

Пожалуйста, попробуйте это

$(document).ready(function() {
  $("#change-color").click(function() {   
    $("#one").toggleClass("two");
  });
});
#one {
  color: green
}

#one.two {
  color: red
}



/* slider */
.slider {
  bottom: 350px;
  left: 300px;
  width: 80px;
  height: 26px;
  background: #333;
  /*margin: 20px auto;*/
  margin-left: 35px;
  position: absolute;
  border-radius: 50px;
  box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), 0px 1px 0px rgba(255, 255, 255, 0.2);
}

.slider:after {
  content: 'OFF';
  color: #000;
  position: absolute;
  right: 10px;
  bottom: 0px;
  z-index: 0;
  font: 12px/26px Arial, sans-serif;
  font-weight: bold;
  text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.15);
}

.slider:before {
  content: 'ON';
  color: #3bb100;
  position: absolute;
  left: 10px;
  top: 1px;
  z-index: 0;
  font: 12px/26px Arial, sans-serif;
  font-weight: bold;
}

.slider label {
  display: block;
  width: 34px;
  height: 20px;
  cursor: pointer;
  position: absolute;
  top: 3px;
  left: 3px;
  z-index: 1;
  background: #fcfff4;
  background: linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
  border-radius: 50px;
  transition: all 0.4s ease;
  box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);
}

.slider input[type=checkbox] {
  visibility: hidden;
}

.slider input[type=checkbox]:checked+label {
  left: 43px;
}

/* end slider */
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="one">
  stackoverflow
</div>

<div>
  <div class="slider">
    <input type="checkbox" value="None" id="rulerSlider" name="check" checked />
    <label for="rulerSlider"></label>
  </div>
<button id="change-color">Chnage</button>
</div>
1 голос
/ 08 января 2020

Вам необходимо использовать класс и убедиться, что спецификация селектора css позволит использовать стиль оверидинга.

Пример

$(document).ready(function() {
  $("#rulerSlider").click(function() {
    $("#one").toggleClass("two");
  });
});
.one {
  color: green
}

.two {
  color: red
}



/* slider */
.slider {
  bottom: 350px;
  left: 300px;
  width: 80px;
  height: 26px;
  background: #333;
  /*margin: 20px auto;*/
  margin-left: 35px;
  position: absolute;
  border-radius: 50px;
  box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), 0px 1px 0px rgba(255, 255, 255, 0.2);
}

.slider:after {
  content: 'OFF';
  color: #000;
  position: absolute;
  right: 10px;
  bottom: 0px;
  z-index: 0;
  font: 12px/26px Arial, sans-serif;
  font-weight: bold;
  text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.15);
}

.slider:before {
  content: 'ON';
  color: #3bb100;
  position: absolute;
  left: 10px;
  top: 1px;
  z-index: 0;
  font: 12px/26px Arial, sans-serif;
  font-weight: bold;
}

.slider label {
  display: block;
  width: 34px;
  height: 20px;
  cursor: pointer;
  position: absolute;
  top: 3px;
  left: 3px;
  z-index: 1;
  background: #fcfff4;
  background: linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
  border-radius: 50px;
  transition: all 0.4s ease;
  box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);
}

.slider input[type=checkbox] {
  visibility: hidden;
}

.slider input[type=checkbox]:checked+label {
  left: 43px;
}

/* end slider */
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="one" class="one">
  stackoverflow
</div>

<div>
  <div class="slider">
    <input type="checkbox" value="None" id="rulerSlider" name="check" checked />
    <label for="rulerSlider"></label>
  </div>
</div>

см .: https://api.jquery.com/toggleClass/ & https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...