Javascript 条件无效
Javascript conditional not working
我遇到了一个简单的条件错误。目前,我同时添加了两个 class 而不是一个。我需要帮助弄清楚为什么会这样。当滑块的值介于 data-min 和 data-max 之间时,我想向跨度添加一个 class,这可以在 html 中找到。
var slider = document.querySelector('.o-donation--slider');
var itemHighlight = document.querySelectorAll('.item--highlight span');
slider.oninput = function() {
for (var j = itemHighlight.length - 1; j >= 0; j--) {
var dataMin = itemHighlight[j].dataset.min;
var dataMax = itemHighlight[j].dataset.max;
if (this.value > dataMin && this.value < dataMax) {
itemHighlight[j].classList.add('active');
} else {
itemHighlight[j].classList.remove('active');
}
}
}
<form action="#">
<div class="col s12 align-center">
<input class="o-donation--slider" type="range" min="1" max="5000" value="100">
</div>
</form>
<div class="col s12 align-center item--highlight">
<span data-min="1" data-max="249">number</span>
<span data-min="250" data-max="449">number</span>
<span data-min="500" data-max="999">number</span>
<span data-min="1000" data-max="2000">number</span>
<span data-min="2001" data-max="3000">number</span>
<span data-min="3001" data-max="5000">number</span>
</div>
您需要先将数据集值转换为数字 - 在您的版本中,您正在比较它们的 字符串 :
const slider = document.querySelector('.o-donation--slider');
const itemHighlightSpans = document.querySelectorAll('.item--highlight span');
slider.addEventListener('input', () => {
const sliderValue = slider.value;
itemHighlightSpans.forEach(itemHighlightSpan => {
const { min, max } = itemHighlightSpan.dataset;
const minNum = Number(min);
const maxNum = Number(max);
if (sliderValue >= minNum && sliderValue <= maxNum) itemHighlightSpan.classList.add('active');
else itemHighlightSpan.classList.remove('active');
});
});
.active {
background-color: yellow;
}
<form action="#">
<div class="col s12 align-center">
<input class="o-donation--slider" type="range" min="1" max="5000" value="100">
</div>
</form>
<div class="col s12 align-center item--highlight">
<span data-min="1" data-max="249">number</span>
<span data-min="250" data-max="449">number</span>
<span data-min="500" data-max="999">number</span>
<span data-min="1000" data-max="2000">number</span>
<span data-min="2001" data-max="3000">number</span>
<span data-min="3001" data-max="5000">number</span>
</div>
我遇到了一个简单的条件错误。目前,我同时添加了两个 class 而不是一个。我需要帮助弄清楚为什么会这样。当滑块的值介于 data-min 和 data-max 之间时,我想向跨度添加一个 class,这可以在 html 中找到。
var slider = document.querySelector('.o-donation--slider');
var itemHighlight = document.querySelectorAll('.item--highlight span');
slider.oninput = function() {
for (var j = itemHighlight.length - 1; j >= 0; j--) {
var dataMin = itemHighlight[j].dataset.min;
var dataMax = itemHighlight[j].dataset.max;
if (this.value > dataMin && this.value < dataMax) {
itemHighlight[j].classList.add('active');
} else {
itemHighlight[j].classList.remove('active');
}
}
}
<form action="#">
<div class="col s12 align-center">
<input class="o-donation--slider" type="range" min="1" max="5000" value="100">
</div>
</form>
<div class="col s12 align-center item--highlight">
<span data-min="1" data-max="249">number</span>
<span data-min="250" data-max="449">number</span>
<span data-min="500" data-max="999">number</span>
<span data-min="1000" data-max="2000">number</span>
<span data-min="2001" data-max="3000">number</span>
<span data-min="3001" data-max="5000">number</span>
</div>
您需要先将数据集值转换为数字 - 在您的版本中,您正在比较它们的 字符串 :
const slider = document.querySelector('.o-donation--slider');
const itemHighlightSpans = document.querySelectorAll('.item--highlight span');
slider.addEventListener('input', () => {
const sliderValue = slider.value;
itemHighlightSpans.forEach(itemHighlightSpan => {
const { min, max } = itemHighlightSpan.dataset;
const minNum = Number(min);
const maxNum = Number(max);
if (sliderValue >= minNum && sliderValue <= maxNum) itemHighlightSpan.classList.add('active');
else itemHighlightSpan.classList.remove('active');
});
});
.active {
background-color: yellow;
}
<form action="#">
<div class="col s12 align-center">
<input class="o-donation--slider" type="range" min="1" max="5000" value="100">
</div>
</form>
<div class="col s12 align-center item--highlight">
<span data-min="1" data-max="249">number</span>
<span data-min="250" data-max="449">number</span>
<span data-min="500" data-max="999">number</span>
<span data-min="1000" data-max="2000">number</span>
<span data-min="2001" data-max="3000">number</span>
<span data-min="3001" data-max="5000">number</span>
</div>