IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   getElementsByName (http://www.imho.ws/showthread.php?t=49829)

Izzyy 28.01.2004 01:31

getElementsByName
 
Помогите.

<div id=main name=main>
bla bla bla.....................
</div>

почему конструция:
document.getElementById('main').innerHTML
возращает мне желаемый результат а конструция:
document.getElementsByName('main').innerHTML
нет?
Я может чего недопонимаю?

Stasik 28.01.2004 01:39

getElementsByName imho функции такой нет т.к. JS работает только с id, a name для VBS.....

Saruman 28.01.2004 01:56

Stasik
Есть такая функция

Izzyy
1. getElementsByName возвращает коллекцию, а не один элемент, поэтому нужно обходить все элементы последовательно.
2. В теге div параметр name не используется.

MSDN - getElementsByName() method
MSDN - DIV element

Izzyy 28.01.2004 07:38

Секундочку. Зачем обходить все элементы?
Разве он недолжен находить элемент по имени?

joker99 29.01.2004 00:01

getElementById возврашяет элемент если он один с таким id, или список если таких элементов несколько.
getElementsByName возвращяет список, даже если элемент с таким именем один.

Izzyy 29.01.2004 01:37

Ну хорошо, а как я могу достучаться до нужно мне элемента? Как именно я его выбираю из списка возвращенных элементов? Или такое не возможно? Тогда я не пойму в чем смысл функции........

Saruman 29.01.2004 03:40

Izzyy
Смысл функции в том, что вернуть все элементы, для которых name=запросу. Затем ты этот список обходишь как обычный массив, циклом, к примеру, и уже анализируешь элементы. Один и тот же name может быть присвоен любому числу элементов, а id должен быть уникальным - отсюда и разница в работе.
Если не знаешь, как работать на ява-скрипте с коллекциями - то так и спрашивай. Если знаешь - то что непонятно-то?

Izzyy 29.01.2004 23:13

На сколько ты уверен в том, что ИД должен быть уникальным? Потому как у меня есть страницы, в которых один и тот же ИД используется несколько раз. Я почему-то наивно полагал, что ИД необходим для определения таблицы стилей для элемента и вовсе не обязательно, что бы элемент с определенным ИД был один единственный. Я могу создать столько слоев сколько я захочу с одним и тем же ИД(например) тогда на мой взгляд getElementById вернет мне массив этих слоев.
Я был полностью уверен, что getElementByName работате по такому же принципу есть один элемент возвращает один, есть несколько возвращает несколько.
Т.е. из твоих солв я должен делать что-то типа:


for (i=0;i<getElementByName('example').lenght;i++)
{
и в этом цикле проверять тот ли это элемент который мне нужен?
}
Теперь поправте меня если я где ошибся.....

joker99 30.01.2004 00:15

Цитата:

Izzyy:
цикле проверять тот ли это элемент который мне нужен?
если тебе нужен определённый элемент, дай ему ИД который не повторяется, а для CSS используй атрибут class.

Например:

<input id=UniqueID class=CssClass>

Izzyy 30.01.2004 00:28

Хорошо.Допустим.
А теперь все таки еще раз вопрос КАК я могу найти нужный мне элемент по имени? Я не могу понять как ИД так и имена элементов могут повторяться разное кол-во раз. НО почему-то ф-ция getElementsByName отличается от getElementById.
Короче, если мне проще использовать getElementsByName так, я должен делать проверку в цикле для каждого элемента из массива возвращенных, проверяя длину возвращенного массива?

joker99 30.01.2004 00:42

если тебе очень важно использовать getElementsByName , то используй её но давай всегда уник имена и бери первый(и единственный) член коллекции которую она вернёт

Saruman 30.01.2004 00:42

Izzyy
Цитата:

Потому как у меня есть страницы, в которых один и тот же ИД используется несколько раз.
Я же не сказал, что так нельзя написать. Я сказал, что это неправильно. W3C для тебя достаточно авторитетный источник? 8) Читаем в HTML 4.01 спецификации:
Цитата:

id = name [CS]
This attribute assigns a name to an element. This name must be unique in a document.
Вопросы?
Цитата:

Я почему-то наивно полагал, что ИД необходим для определения таблицы стилей для элемента и вовсе не обязательно, что бы элемент с определенным ИД был один единственный. Я могу создать столько слоев сколько я захочу с одним и тем же ИД(например) тогда на мой взгляд getElementById вернет мне массив этих слоев.
Верно мыслишь, наивно 8) Не вернет.
Цитата:

Т.е. из твоих солв я должен делать что-то типа:
for (i=0;i<getElementByName('example').lenght;i++)
{
и в этом цикле проверять тот ли это элемент который мне нужен?
}
Верно
Цитата:

Теперь поправте меня если я где ошибся.....
getElementByName('example').length 8)))
Цитата:

НО почему-то ф-ция getElementsByName отличается от getElementById.
Уже три раза объяснил почему. Если все еще не понял - спрашивай, объясню четвертый 8)
Цитата:

Короче, если мне проще использовать getElementsByName так, я должен делать проверку в цикле для каждого элемента из массива возвращенных, проверяя длину возвращенного массива?
В общем да. Обходишь весь массив и выбираешь нужный тебе элемент.
А вообще, если честно, не надо маяться и приспосабливать для своих целей то, что для них не приспособлено. Проставь везде уникальные id и обращайся напрямую к элементу, т.к. оно для этого и служит.

Izzyy 30.01.2004 01:32

Ок, я более не менее разобрался, теперь я знаю куда копать.

Vaulter 31.01.2004 00:10

в спецификации по Опере четко написанно что они поддержали НЕ ВСЕ функции DOM например,
тоже самое и с IE и Gecko


Часовой пояс GMT +4, время: 23:58.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.