#javascript
#javascript
Вопрос:
В функции Javascript я хотел бы выбрать все элементы, которые являются class1 И class2. Но где «class1» = X, а X — переменная myfunction(X).
Пример:
function myfunction(X) {
var list = document.getElementsByClassName(X, "class2");
var listAll = document.getElementsByClassName("All");
for(var t=0;t<listAll.length;t )
listAll[t].style.display="none";
for(var y=0;y<list.length;y )
list[y].style.display="block";
}
<button onclick="myfunction('class1')">Click to select only class1 X 2</button>
<button class="All class1">Class: 1</button>
<button class="All class1 class2">Class: 1 X 2</button>
<button class="All class2">Class: 2</button>
Как я могу изменить var list = document.getElementsByClassName(X, «class2») только на целевой элемент, относящийся к классам 1 И 2?
Спасибо!
Ответ №1:
getElementsByClassName
принимает один аргумент, который представляет собой разделенный пробелом список классов, которые должен иметь каждый элемент в результате. Итак:
var list = document.getElementsByClassName(X " class2");
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^
Живой Пример:
function myfunction(X) {
var list = document.getElementsByClassName(X " class2");
var listAll = document.getElementsByClassName("All");
for(var t=0;t<listAll.length;t )
listAll[t].style.display="none";
for(var y=0;y<list.length;y )
list[y].style.display="block";
}
<button onclick="myfunction('class1')">Click to select only class1 X 2</button>
<button class="All class1">Class: 1</button>
<button class="All class1 class2">Class: 1 X 2</button>
<button class="All class2">Class: 2</button>
В качестве альтернативы, вы можете присвоить любому селектору CSS (включая селектор составного класса) значение querySelectorAll
для получения моментального NodeList
снимка вместо живого HTMLCollection
.
Комментарии:
1. Это хорошо, большое спасибо! Если я правильно понял, пробел необходим перед class2, чтобы соответствовать стилю листинга живой коллекции HTML? В любом случае, спасибо, это была сложная деталь
2. @Naga — Это просто способ
getElementsByClassName
работы, если вы хотите сопоставить несколько классов, вы перечисляете классы с пробелами в них :.getElementsByClassName("class1 class2")
. ПосколькуX
в нем не будет пробела, я включил его в следующую за ним строку. (Пробелы в начале или конце строки игнорируются.)
Ответ №2:
Просто используйте querySelectorAll
var list = document.querySelectorAll(".class1.class2");
Также используйте EventListener и classList.toggle
document.getElementById("sel").addEventListener("click",function() {
[...document.querySelectorAll(".All")].forEach(el => el.classList.toggle("hide",1));
[...document.querySelectorAll(".class1.class2")].forEach(el => el.classList.toggle("hide",0));
})
.hide { display: none }
<button type="button" id="sel" >Click to select only class1 X 2</button>
<button type="button" class="All class1">Class: 1</button>
<button type="button" class="All class1 class2">Class: 1 X 2</button>
<button type="button" class="All class2">Class: 2</button>
Если вы хотите передать класс, попробуйте это:
document.getElementById("sel").addEventListener("click",function() {
[...document.querySelectorAll(".All")].forEach(el => el.classList.toggle("hide",1));
[...document.querySelectorAll(this.dataset.select ".class2")].forEach(el => el.classList.toggle("hide",0));
})
.hide { display: none }
<button type="button" id="sel" data-select=".class1">Click to select class1 plus class 2</button>
<button type="button" class="All class1">Class: 1</button>
<button type="button" class="All class1 class2">Class: 1 X 2</button>
<button type="button" class="All class2">Class: 2</button>
Комментарии:
1. Спасибо! Хотя мне нужно использовать этот X в моем стиле function (X) для целей моего проекта.
2. Теперь
X
это атрибут данных во втором примере