Массив (html-коллекция) элементов. Нафига они сделали ЭТО?
<html>
<head>
<title> test </title>
</head>
<body >
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<script>
//p=document.querySelectorAll("p")
p=document.getElementsByTagName("p")
for(i in p){
if(!(p.hasOwnProperty(i))) break
console.log(p[i])
p[i].style.background="red" // Uncaught TypeError: Cannot set property 'background' of undefined
}
</script>
</body>
</html>
На последней ирерации валится с ошибкой. Они засунули свойство lenght прямо в объект. Почему не в прототип??? Делаю вот так if((!(p.hasOwnProperty(i))||i==="length")) break Все работает. Но я не понимаю, нахера нужно было засовывать в итерируемый объект это свойство? Они специально издеваются, или просто мозга нет? Проверил и для document.querySelectorAll и для document.getElementsByTagName, работает одинаково. А какие еще сюрпризы можно ожидать в браузерах от этих мудаков? |
Ну ты же неумный. Коллекции элементов, как и массивы, перебираются через обычный for или for of в современных браузерах.
|
Erolast,
Ну и что, что они перебираются? Это не значит, что их нельзя перебирать for in. И к вопросу это отношения не имеет. Нахрена имплементаторы засунули с-во length прямо в основной объект? В этом необходимость была, или чо? |
Меня тоже этот вопрос беспокоил.
Вот тут можно почитать детали: https://code.google.com/p/chromium/i...tail?id=339202 Цитата:
|
По сути проблема не только в length. Проблема во всех DOM-объектах со всеми свойствами и методами. Есть примеры исключений?
|
Цитата:
И еще раз, фор ин - частный случай, клинический случай - in. if('length' in p) - не имею права? Идите плачьте в унитаз. |
Ему лень написать свой foreach на фор лупах, будет волосы на ж рвать вписывая проверки на все что еще ему вперде попадется.
Кстати, в коллекциях маст хэв метод item(). Я вроде видел что и коллекции этих элементов такой имеют. Если item() есть, то почему не юзаете? |
как-то долго прожил очередной аккаунт foo :)
|
Наверно можно подводить итог под темой =)
<img src="http://national-travel.ru/wp-content/uploads/2010/12/belki-isteryhki.jpg"></img><br> <img src="http://www.netlore.ru/upload/files/19/3_233.jpg"></img> |
kostyanet, про foreach это верно, но факт что в реализациях косяк. Так не должно быть. Но он нормальным людям не мешает, так что нет смысла исправлять.
Цитата:
alert('length' in document.images);
alert('length' in []);
Так что сам поплачь ) |
| Часовой пояс GMT +3, время: 15:16. |