Каков наилучший способ получить список содержимого определенной группы элементов DOM в javascript? - PullRequest
0 голосов
/ 04 марта 2009

Основной сценарий: у меня есть ряд элементов на странице HTML, сгенерированных динамически. (В настоящее время они все divs, но они не должны быть.)

Мне нужна функция javascript, которая будет зацикливаться, хотя все те divs (или что-то еще) ищут наличие определенного значения.

Какой самый лучший кросс-браузерный способ сделать это? Работает ли getElementsByName () на divs во всех браузерах? Могу ли я дать им одинаковый идентификатор и каким-то образом получить массив из getElementById?

Если я изменю эти divs на spans или inputs, это облегчит задачу?

Спасибо!

(edit: для этого проекта было бы лучше, если бы было решение без использования каких-либо внешних библиотек js. Я предполагаю, что в jQuery есть функция, которая делает это только в одной строке, но на данный момент я бы хотел не открывайте эту банку червей с клиентом.)

Ответы [ 3 ]

3 голосов
/ 04 марта 2009

getElementsByTagName определяется в DOM Core, так что любой браузер, который реализует это работает. Это касается каждого браузера, который используется в настоящее время.

Взгляните сюда за подробностями: http://www.quirksmode.org/dom/w3c_core.html

Нужно опасаться, что getElementsByTagName возвращает NodeList, а не массив. Он работает так же, но оценивается очень поздно, поэтому, если вы добавите / удалите узлы в DOM при обходе NodeList, вы получите странные результаты. В этих случаях напишите две петли; Сначала выполните цикл по NodeList и сохраните все записи в массиве. Затем выполните цикл по массиву.

2 голосов
/ 04 марта 2009

Неважно, что это за элементы, но важно то, где они находятся на странице. Если все они являются дочерними элементами одного родительского элемента, ваша проблема проста. Присвойте родительскому элементу идентификатор, и вы можете использовать getElementById() для его захвата и повторения его дочерних элементов.

getElementById() поведение не определено, когда в документе найдено более одного экземпляра идентификатора. Большинство из них вернет первый элемент, который сможет найти, но вы, конечно, не сможете найти массив.

getElementsByTagName() будет работать только в том случае, если вы можете использовать какой-то непонятный тег, который, как вы уверены, не появится в других местах вашей страницы. Вы можете увеличить это, указав, что интересующие вас элементы будут иметь атрибут, который вы можете проверить (например, @class или @title). Затем вы можете просмотреть результат проверки getElementsByTagName() и посмотреть только элементы, в которых присутствует атрибут.

1 голос
/ 04 марта 2009

Вы можете использовать этот сайт, чтобы увидеть, что getElementBy наиболее соответствует вашим потребностям.
Некоторые используют библиотеки, а некоторые, например, troelskn , пишут, которые применяются для стандартного javascript во всех поддерживаемых браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...