2016-12-15 4 views
6

Каким образом этот селектор JavascriptJavascript Выбор класса

document.getElementsByClassName('first-class class-child second-child')

выглядит идентично этим селектором JQuery

$('.first-class .class-chlid .second-child'); 

пока он не работает таким же образом?

+3

Используйте 'document.querySelectorAll ('Первоклассный .class-ребенок .second-ребенок'.) ', https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll – Satpal

+0

Далее, все ответы, вы не можете использовать' querySelectorAll' так же, как вы используете '$'. Вам нужно использовать '.forEach'. –

+1

Настоящий ответ заключается в том, что getElementsByClassName не принимает селектор вообще.Ни один из ответов не упоминает об этом. – BoltClock

ответ

9

getElementsByClassName будет выбирать элемент, который имеет все эти классы, разделенные пробелами. Вместо этого используйте метод querySelectorAll, который помогает выбирать элементы на основе селектора CSS.

document.querySelectorAll('.first-class .class-chlid .second-child'); 
6

Похоже, что вы ищете document.querySelector() и/или document.querySelectorAll():

var matches = document.querySelectorAll(".first-class .class-chlid .second-child"); 

Заметим, что это не будет идентичную с JQuery в том смысле, что возвращаемое значение не иметь свободный API для применения изменений/эффектов/и т. д. для всех согласованных элементов. То, что вы получаете здесь, это просто массив согласованных элементов. Вы можете сделать с этим массивом то, что хотите.

+2

Это не возвращает 'array', а [NodeList] (https://developer.mozilla.org/en-US/docs/Web/API/NodeList). Незначительный, но важный момент. – ste2425

3

getElementsByClassName function возвращает массивный объект всех дочерних элементов, которые имеют все указанные имена классов.

Если вы хотите, чтобы «ходить» в дом-дерево (так же, как это делает JQuery), вы должны использовать querySelectorAll function

document.querySelectorAll('.first-class .class-child .second-child') 
2

это не ясно из вопроса, если вы ищете эквивалент Javascript или эквивалентный jquery (даже если ответ уже принят, чтобы сделать это различие, если кто-либо еще придет к этому вопросу, они могут искать обратное):

Противоположность также применима в том, что вы можете изменить jquery для соответствия getElementsByClassName (а не перейти на querySelectorAll в javascript)

Этот код:

document.getElementsByClassName('first-class class-child second-child') 

возвращает массив объект, похожий на все дочерние элементы, которые имеют все заданные имена классов (MDN)

Эквивалент в JQuery является:

$('.first-class.class-child.second-child'); 

который находит все элементы, которые имеют все названий классов.

Если вы хотите, чтобы найти элементы с любой из этих имен классов, используйте запятую:

$('.first-class,.class-child,.second-child'); 
+0

Основываясь на вопросе, я бы не стал предполагать, что искатель ищет эквивалент одного из них. Все, что они задают, - это то, почему два утверждения функционируют так по-разному, несмотря на то, что они выглядят одинаково. – BoltClock

+0

@BoltClock, без сомнения, но все остальные ответы предоставили эквивалентное изменение javascript, поэтому я хотел указать противоположное: эквивалентное изменение jquery. –

Смежные вопросы