Увы, нас ждёт разочарование. То, что приходит - это набор, но не совсем массив. Его надо преобразовывать в Array и уже потом склеивать.
Как склеивать? Обычно рекомендуют Array.prototype.slice.call(document.getElementsByTagName('input'), 0) или немыслимое [].slice.call(document.getElementsByTagName('input'), 0). Это работает во всех браузерах, кроме... IE. IE считает, что COM-объект HTMLCollection вовсе не обзательно будет массивом. И бросает ошибку "JScript object expected.".
Поэтому мы расширим функцию из предыдущего примера ещё одной полезной тулзой.
function toArray(obj) {
var array = [];
for (var i = 0; obj.length && i < obj.length; i++)
array[i] = obj[i];
return array;
}
function setReadOnly(){
var item = document.getElementsByTagName('input');
var el, els = toArray(document.getElementsByTagName('input')).concat(
toArray(document.getElementsByTagName('textarea')));
for(el in els)
if(els[el].readOnly && typeof(els[el].className) != "undefined")
els[el].className += ' readonly';
}
Комментариев нет:
Отправить комментарий