Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Является ли элемент дочерним. (https://javascript.ru/forum/events/52683-yavlyaetsya-li-ehlement-dochernim.html)

Tsamsiyu 31.12.2014 23:10

Является ли элемент дочерним.
 
Здравствуйте, господа, небольшой вопрос.

Допустим я имею 2 элемента и допустим нужно узнать является ли первый элемент дочерним второго или же второй является родительским первого.

Сейчас я написал функцию, которая делает эту проверку рекурсивно, обходя все дом-элементы, но хотелось бы узнать нет ли в js встроенной возможности для этой проверки, ведь вопрос достаточно стандартный.

Octane 31.12.2014 23:32

https://developer.mozilla.org/ru/doc.../Node.contains

danik.js 01.01.2015 18:29

if (element1.parentNode === element2)
    ...
else if (element2.parentNode === element1)
    ...
else
    ...

Tsamsiyu 02.01.2015 21:43

Разница между готовым методом и рекурсией.
 
А есть ли вообще разница, использовать рекурсию или готовую функцию, ну т.е. небольшой оффтоп, я к тому, что нативные методы getElement или querySelector не таким же образом действуют? Разница в скорости выполнения будет большая? (относительно не только этой ситуации).

danik.js 02.01.2015 22:56

Откуда у тебя рекурсия? Покажи код.
Цитата:

Сообщение от Tsamsiyu
Разница в скорости выполнения будет большая?

Абсолютная - ничтожная.
А вот в относительном выражении - разница может быть десятикратной и более. Показывай код сравним.
В любом случае тут не на скорость ориентироваться надо.

Tsamsiyu 02.01.2015 23:30

Поиск ближайшего родительского элемента.
 
Я же написал, небольшой оффтоп, но тема та же.
1) есть элемент А.
2) выше его есть элементы B, нужно найти ближайшего родителя, т.е. пошел от обратного - проверяю не то, что A является дочерним B, а начиная от элемента A ищу ближайшего родителя B.
var _searchNsAttr = function (element, attribute) {
		if (element == document.body) {
			return false;
		}
		var attrName = element.getAttribute('data-ns-' + attribute);
		if (!!attrName) {
			return attrName;
		} else {
			return _searchNsAttr(element.parentNode, attribute);
		}
	};

Octane 02.01.2015 23:42

Не пойму, чем метод contains не угодил?
Работает везде.
В старых версиях фаерфокса не было, но можно заполифилить http://javascript.ru/forum/events/81...html#post47416

Tsamsiyu 03.01.2015 02:08

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


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