bes,
посмотрите как эмулируются для неподдерживающих броузеров события mouseenter mouseleave http://learn.javascript.ru/mouse-eve...ter-mouseleave там проверяется parentNode - удобнее и с объектами событий все сделано кроссбраузерно |
Цитата:
Вы процитировали мое сообщение не полностью, опустив более важное отличие, а именно живость массива. Вот пример приведенного кода, только a - это уже массив, с одним элементом - ссылкой. Запускать на вашем HTML-е var a_elem = document.getElementsByTagName('a')[0]; var a = [a_elem]; console.log(a.length);//1 console.log(a[0]);//<a href=""> console.log(a[0].innerHTML);//content document.getElementsByTagName('div')[0].innerHTML = 'qwe'; console.log(a.length);//1 console.log(a[0]);//<a href=""> console.log(a[0].innerHTML);//content Как видим для настоящего массива количество элементов не изменилось, и он даже все еще хранит некоторую информацию об элементе которого уже нету в DOM-модели. А HTMLCollection в данном случае вместе с ичсчезновением ссылки, и сам переставал ссылатся на нее, и становился размера 0 ================================================== ====== Вообще массивом является только то, что выдает true на x instanceof Array var construct = function(){//конструктор объектов - наследующих массив for(var i =0; i < arguments.length; i++){ this.push(arguments[i]); } }; construct.prototype = []; var a = document.getElementsByTagName('a'); var b = {}; b[0] = 'qwe'; var c = ['qwe'] d = new construct('qwe'); console.log(a.length, a[0], a instanceof Array);//false console.log(b.length, b[0], b instanceof Array);//false console.log(c.length, c[0], c instanceof Array);//true console.log(d.length, d[0], d instanceof Array);//true Результат: Код:
1 <a href=""> false |
Цитата:
Только для HTMLCollection эти ссылки будут хранится только на живые элементы, если они есть. ПРи их исчезновении, коллекция будет уменьшатся в размерах. А при добавлении новых элементов, наоборот даже расти: var a = document.getElementsByTagName('a'); console.log(a.length);//1 document.getElementsByTagName('div')[0].innerHTML += '<a href="">content</a>'; console.log(a.length);//2, потому что ссылок уже две Цитата:
Просто в консоли отладчика он выглядит как такая строка, которую я сюда скопипастил. Запустите мои примеры в консоли firebug(это плагин для FireFox), например. Можно и в отладочной консоли любого другого браузера, благо она есть сейчас во многих браузерах. Цитата:
Зато я привел вам столь же короткий способ решения, без циклов, который будет работать. Даже Pavel M., уже вам говорит о том же самом |
Цитата:
Gvozd, спасибо за пояснения, разницу между массивами и HTML-коллекциями я почувствовал. Цитата:
Цитата:
Если о вариантах получения единственного элемента-ссылки, то в случае с несколькими элементами-ссылками всё равно придётся использовать цикл. Цитата:
|
Кстати, статья http://learn.javascript.ru/mouse-events теперь расположена по адресу http://learn.javascript.ru/mousemove-events.
|
Удалось получить простой и кроссбраузерно работающий код, когда скрытие div происходит только при уходе с него (Pavel M., способ с parentNode в статье, действительно, пригодился, по ходу я просто не понял этой фишки, читая статью до этого, то ли обновлённая статья стала понятнее).
Код:
<div id=div1 style="background: gray" |
Цитата:
|
Цитата:
|
Раед, на мой взгляд простая конструкция это
var foo = null; ;) |
Цитата:
Практически уверен, что нету ни одного стандарта, допускающего такие вольности, и ваш взгляд ошибочен |
Часовой пояс GMT +3, время: 16:28. |