Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата asus a9rp:
Iska, с .nextSibling я что-то не поладил: <div><a></a></div><span></span> - нельзя получить тэг <a>. »
Всё можно. Просто эта структура:
Код: Выделить весь код
<div>
    <a></a>
</div>
<span></span>
отличается от приведённой выше, где все тэги находились на одном уровне.

Смотрите,
читать дальше »
в процедуре обработки события Вы определяете, от какого элемента оно пришло. У нас есть три случая:

1. От «div».

При этом тэг «div» определяется как элемент, от которого пришло событие:
Код: Выделить весь код
elem=window.event.srcElement;
Тэг «a» определяется, как первый дочерний элемент по отношению к тэгу «div»:
Код: Выделить весь код
elem=window.event.srcElement.firstChild;
Тэг «span» по отношению к тэгу «div» определяется, как следующий элемент в коллекции элементов того же уровня:
Код: Выделить весь код
elem=window.event.srcElement.nextSibling;
Аналогично рассуждаете и для прочих тэгов:
2. От «a».
«div»:
Код: Выделить весь код
elem=window.event.srcElement.parentNode;
«a»:
Код: Выделить весь код
elem=window.event.srcElement;
«span»:
Код: Выделить весь код
elem=window.event.srcElement.parentNode.nextSibling;
3. От «span».
«div»:
Код: Выделить весь код
elem=window.event.srcElement.previousSibling;
«a»:
Код: Выделить весь код
elem=window.event.srcElement.previousSibling.firstChild;
«span»:
Код: Выделить весь код
elem=window.event.srcElement;
Дальше делаете с полученным потребным элементом что угодно.

Два замечания:
* не забывайте, что события «всплывают» по иерархии обработчиков, потому отменяйте сие, где надо («cancelBubble»);
* мои рассуждения касаются прежде всего IE, как модели DOM, так и реализации JavaScript, в классической же интерпретации (стандарт консорциума WWW) могут быть некоторые отличия.

Отправлено: 01:36, 02-08-2012 | #23