Скажите пожалуйста, почему при выборке элементов, данный вариант выдаёт ошибку?
[].forEach.call(pages, function(el, i, p) {
if (p[0].contains("active")){
alert("wow");
}
});
|
Nlk,
contains это что? |
рони,
Проверка на содержание класса. Видимо это node узел и у не получиться проверить? |
Nlk, у вы забыли сначала обратиться к свойству "classList".
ps. зачем перебирать коллекцию, если проверяется всегда только первый эл-т? |
Nexus,
Блиин. Спасибо большое. |
Пожалуйста дайте совет, как лучше реализовать данную логику:
есть 4 элемента, если элемент 1 содержит класса "active" - то элементу 3 и 4 назначается класс "hide", если элемент 2 содержит класса "active" - то элементу 4 назначается класс "hide", если элемент 3 содержит класса "active" - то элементу 1 назначается класс "hide", если элемент 4 содержит класса "active" - то элементу 1 и 2 назначается класс "hide". И соответственно в начале каждой проверки удалять все классы "hide". Мой не рабочий вариант:
[].forEach.call(pages, function(el, i, p) {
i == pageIndex ? p[i].classList.add("active") : el.classList.remove("active");
if (p[0].classList.contains("active")) {
el.classList.remove("hide");
p[2].classList.toggle = "hide";
p[3].classList.toggle = "hide";
} else if (p[1].classList.contains("active")) {
el.classList.remove("hide");
p[3].classList.toggle = "hide";
} else if (p[2].classList.contains("active")) {
el.classList.remove("hide");
p[0].classList.toggle = "hide";
} else if (p[3].classList.contains("active")) {
el.classList.remove("hide");
p[0].classList.toggle = "hide";
p[1].classList.toggle = "hide";
} else {}
});
|
Я думаю логика у вас неправильная, если все элементы изначально скрыто, то нет необходимости какие-то отдельные скрывать повторно.
Нужно наоборот найти активные и отобразить их. |
<style>
.hide { display:none;}
div { display:inline-block;
color:grey }
.current { color:black; }
</style>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<script>
var pages = document.querySelectorAll('div');
[].forEach.call(pages, function(el, i, p) {
p[i].onclick = function() {
for(var j = 0; j < p.length; j++) {
p[j].classList.add("hide");
p[j].classList.remove("current");
}
for(var j = i - 1 < 0?0:i-1; j < (i+2 <p.length?i+2:p.length);j++) {
p[j].classList.remove("hide");
}
p[i].classList.add("current");
}
});
</script>
|
Dilettante_Pro,
спасибо огромнейшее, буду разбирать ваш пример. Nexus, извиняюсь за отсутствие ясности в вопросе. |
Такой вот слайдер получился https://codecanyon.net/item/page-sli...lugin/22780197
|
| Часовой пояс GMT +3, время: 12:39. |