На документе IE.getElementsByName не будет работать

Я использую этот код:

<div name="1234">
   <img src="pic.gif" height="70" width="100" onMouseOver="clear('1234')">
</div> 

и:

function clear(element_name){
    document.getElementsByName(element_name)[0].innerHTML="";
}

он работает в Firefox и Opera, но не работает в IE 6.0 или IE 8.0, и, вероятно, даже не в новых IE.

Что делать?

2 ответов


Ну, проблема в следующем: IE понимает документ.getElementsByName(...)[0] в качестве документа.метода getElementById(...). Поэтому, если вы также определите id для своего элемента, документ метода.getElementsByName(имя_элемента)[0].innerHTML= "" будет удивительно также работать в IE!

но поскольку вам все равно нужно определить id из-за IE, и поскольку id всегда должен начинаться с символа, вы должны использовать:

<div id="a234">
    <img src="pic.gif" height="70" width="100" onMouseOver="clear('a234')">
</div> 

и этого команды:

function clear(element_id){
    document.getElementById(element_id).innerHTML="";
}

еще больше, документ.getElementsByName(...)[0] медленнее в Firefox: http://www.uize.com/tests/performance/getElementById-vs-getElementsByName.html

таким образом, id определенно выигрывает гонку.

обновление:

также важен тот факт,что мы можем адресовать каждый идентификатор #a234 {...} в в CSS. Таким образом, мы можем определить собственный стиль для каждого id, и это делает id еще более мощным.


используя getElementsByName чтобы получить элемент DOM, где имя атрибут не является частью спецификации W3C (например, в вопросе имя не существует для элемента DIV), т. е. не получает эти элементы. FF делает это.
Просто чтобы уточнить:атрибут expando или более известный как пользовательский атрибут это то, что я говорю об атрибутах, которые не являются частью спецификации W3C.

читать: getElementsByName в IE7
Читайте:http://msdn.microsoft.com/en-us/library/ms536438 (VS.85).aspx

ну и в заключение:
Использовать getElementsByName при попытке получить "Формы Контроля" (ввод, выбор, textarea), потому что у них есть имя как атрибут согласно спецификации.
Если элементы не являются элементами управления формы, используйте getElementById вместо этого.