Я пытаюсь получить дочерний диапазон с class = 4. Вот пример элемента:
<div id="test">
<span class="one"></span>
<span class="two"></span>
<span class="three"></span>
<span class="four"></span>
</div>
У меня есть доступные инструменты: JS и YUI2. Я могу сделать что-то вроде этого:
doc = document.getElementById('test');
notes = doc.getElementsByClassName('four');
//or
doc = YAHOO.util.Dom.get('#test');
notes = doc.getElementsByClassName('four');
Они не работают в IE. Я получаю сообщение об ошибке, что объект (doc) не поддерживает этот метод или свойство (getElementsByClassName). Я пробовал несколько примеров кроссбраузерных реализаций getElementsByClassName, но я не мог заставить их работать и по-прежнему получал эту ошибку.
Я думаю, что мне нужен кроссбраузер getElementsByClassName, или мне нужно использовать doc.getElementsByTagName ('span') и перебирать, пока не найду класс 4. Я не знаю, как это сделать.
javascript
yui
spyderman4g63
источник
источник
querySelectorAll
поддерживается IE 8+, тогда какgetElementsByClassName
поддерживается только IE 9+. Если вы можете отказаться от IE 7, вы в безопасностиquerySelectorAll('.4')
. Кстати,4
неверное имя класса.document.querySelectorAll
является DOM и не имеет ничего общего с YUIОтветы:
Используйте
doc.childNodes
для перебора каждого из нихspan
, а затем отфильтруйте тот, которыйclassName
равен4
:
источник
className
примерно так:if(doc.childNode[i].className.match("\s*" + search_class + "\s*")
где переменнаяsearch_class
- это имя класса, который вы ищете.Используйте querySelector и querySelectorAll
IE9 и выше
;)
источник
Принятый ответ проверяет только непосредственных потомков. Часто мы ищем потомков с таким именем класса.
Кроме того, иногда нам нужен любой дочерний элемент , содержащий className.
Например:
<div class="img square"></div>
должно соответствовать поиску по className «img», даже если это точное имя className не «img».Вот решение обеих этих проблем:
Найдите первый экземпляр дочернего элемента с классом
className
источник
Используйте element.querySelector (). Предположим: myElement - это родительский элемент, который у вас уже есть. sonClassName - это класс ребенка, которого вы ищете.
Для получения дополнительной информации посетите: https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector.
источник
let child = myElement.querySelector('sonClassName');
в моем случае пришлось использоватьВы можете попробовать:
или
источник
Мне кажется, что вы хотите четвертый пролет. Если да, вы можете просто сделать это:
или
Этот последний гарантирует, что нет никаких скрытых узлов, которые могут его испортить.
источник
TagName
Это оно! Так просто..firstChild
и.firstChildElement
хотяНо имейте в виду, что старые браузеры не поддерживают
getElementsByClassName
.Тогда вы можете сделать
Кажется, это работает, но имейте в виду, что класс HTML
источник
Используйте имя идентификатора
getElementById
без#
знака перед ним. Затем вы можете использоватьspan
дочерние узлыgetElementsByTagName
и перебирать их, чтобы найти узел с правильным классом:Демо: http://jsfiddle.net/Guffa/xB62U/
источник
getElementsByTagName
Метод работает в IE 8. Он поддерживается еще в IE 5.5. developer.mozilla.org/en-US/docs/DOM/…На мой взгляд, каждый раз, когда вы можете, вы должны использовать Array и его методы. Они намного, намного быстрее, чем цикл по всей DOM / оболочке или вставка материала в пустой массив. Большинство представленных здесь решений можно назвать наивными, как описано здесь (кстати, отличная статья):
https://medium.com/@chuckdries/traversing-the-dom-with-filter-map-and-arrow-functions-1417d326d2bc
Мое решение : (предварительный просмотр на Codepen: https://codepen.io/Nikolaus91/pen/wEGEYe )
источник
Современное решение
документация
источник
Я сделаю это с помощью jquery примерно так ...
источник
Вот относительно простое рекурсивное решение. Думаю, здесь уместен поиск в ширину. Это вернет первый элемент, соответствующий найденному классу.
источник
Вы можете получить родительский класс, добавив строку ниже. Если бы у вас был id, было бы проще с
getElementById
. Тем не менее,Затем вы можете использовать
querySelectorAll
родительский<div>
элемент, чтобы получить все соответствующиеdiv
s с классом.progress__marker
querySelectorAll
будет получать каждыйdiv
с классомprogress__marker
источник
Обновление ES6 за июнь 2018 г.
источник
YUI2 имеет кроссбраузерную реализацию
getElementsByClassName
.источник
getElementsByClassName
- это методYAHOO.util.Dom
. В вашем случае звонок будет выглядеть примерно такYAHOO.util.Dom.getElementsByClassName('four', 'span', 'test')
. Вероятно, вам следует прочитать документацию, чтобы получить более подробное представление о том, что делает этот вызов. Краткая версия заключается в том, что теперь он будет искатьspan
элементы с классомfour
под элементом DOM сtest
егоid
.get
вызова является просто элемент DOM. YUI не использует подход, основанный на оптовой продаже всего объекта, зависящего от фреймворка, как это делает что-то вроде jQuery, и при этом он не использует собственные объекты, такие как Prototype, как обезьяна-патч (сделал? Я не перепутал с Protoype навсегда). В этом отношении YUI больше похож на Додзё.Вот как я это сделал с помощью селекторов YUI. Благодаря предложению Хэнка Гэя.
где four = имя класса, span = тип элемента / имя тега и test = родительский идентификатор.
источник
Используйте
YAHOO.util.Dom.getElementsByClassName()
из здесь .источник