Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Делегирование событий и их папа (https://javascript.ru/forum/events/54299-delegirovanie-sobytijj-i-ikh-papa.html)

zhurchik 12.03.2015 15:43

Делегирование событий и их папа
 
Приветствую всех!
Проблема следующая:
Есть общий блок в котором много вложенных (дочерних)
На этом общем блоке я повесил обработчик, так вот, если пользователь осуществляет клик по дочернему блоку можно ли одним движением руки узнать его родителя? Если принимать во внимании то, что в дочерних блоках находятся свои вложенные блоки....

laimas 12.03.2015 16:21

Можно, и даже без движения руки object.prentNode - вернет родителя object.

Если принимать во внимании то, что в дочерних блоках находятся свои вложенные блоки

Родители, это по дереву вверх, вниз, это потомки.

zhurchik 12.03.2015 16:36

laimas,
К такому подходу я пришел сам, и мне кажется, что это какой-то костыль....
Вот думаю, может есть более простой способ!

laimas 12.03.2015 16:42

>это какой-то костыль....
Вот думаю, может есть более простой способ!


Ну а почему бы и нет - попробуйте позвонить в справочную службу 09. )

Aetae 12.03.2015 16:48

Есть node.compareDocumentPosition( otherNode ).
Не знаю правда как с производительностью по сравнению с проходом по цепочке parentNode.)

zhurchik 12.03.2015 17:10

Aetae,
C поддержкой проблемы.
Я думал, что есть какой-то способ через событие получить объект элемента, который делегирует событие

laimas 12.03.2015 17:16

Делегируют как раз родителю, а щелкают как раз по потомкам.

Aetae 12.03.2015 17:25

По производительности проверил, выигрыш явный в случае если нода не дочерняя. Впрочем в вашем случае это не имеет ни малейшего значения ибо задержка пренебрежимо мала.
А так да ie9+, ослик как всегда нагадил.

P.S. Прочитал повнимательнее и понял что ничего не понял.)
Есть this(на чём висит) и есть event.target(куда кликнули), а вам нужно что-то между ними?

DivMan 20.07.2016 21:22

Я правильный код сделал для вопроса?
https://jsfiddle.net/duyy7ymd/

Царь Леонид 20.07.2016 22:25

Цитата:

Сообщение от DivMan (Сообщение 422845)
Я правильный код сделал для вопроса?
https://jsfiddle.net/duyy7ymd/

Нет, вы просто взяли элемент и повесили на него обработчик, а надо, чтобы показывался родитель.
var parent = document.querySelector('.parent')

parent.addEventListener('click', function(e){
	console.log('родитель является блок с классом ' + e.target.className)
})


Часовой пояс GMT +3, время: 03:11.