Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обращение к потомкам элемента через переменную this (https://javascript.ru/forum/dom-window/60322-obrashhenie-k-potomkam-ehlementa-cherez-peremennuyu.html)

shurik_shink 22.12.2015 15:26

Обращение к потомкам элемента через переменную this
 
Используя переменную this можно обращаться к потомкам по индексу - порядку следования.
Например:
this.children[1].innerHTML = ".....";

Вопрос:
Можно ли обратиться к потомку не по индексу, а например по имени тега, классу, значению какого-то атрибута?

Не банальным перебором в цикле всех дочерних элементов.

!Интересует исключительно возможность без использования библиотеки jquery.

Яростный Меч 22.12.2015 15:51

shurik_shink,
тебе нужны только прямые дочерние элементы, у которых parentNode==this, или допускаются все элементы внутри this (т.е. в том числе потомки дочерних элементов и т.д.)?

Decode 22.12.2015 15:58

shurik_shink, https://developer.mozilla.org/ru/doc.../querySelector

ruslan_mart 22.12.2015 16:44

Decode, это не подойдёт.

ruslan_mart 22.12.2015 16:55

Предлагаю своё расширение:

Element.prototype.getChilds: function(selector) {
	var originID = this.id;
	this.id = '___' + Date.now();
	var elements = document.querySelectorAll('#' + this.id + ' > ' + (selector || '*'));
	this.id = originID;
	return elements;
};



element.getChilds('div');

element.getChilds('.foo');

element.getChilds('[foo="bar"]');

Яростный Меч 22.12.2015 18:06

для прямых чилдов можно проще:
this.querySelectorAll(":scope>div")


Здесь выбираем дочерние элементы с тегом div, но вместо div можно любой селектор

ruslan_mart 22.12.2015 18:16

Яростный Меч, в IE не поддерживается.

shurik_shink 22.12.2015 19:26

Цитата:

Сообщение от Яростный Меч (Сообщение 400924)
this.querySelectorAll(":scope>div")

Здесь выбираем дочерние элементы с тегом div, но вместо div можно любой селектор

Спасибо, работает

ruslan_mart 22.12.2015 19:46

shurik_shink, это CSS4, с поддержкой не очень, в IE и на мобильных браузерах работать не будет. ;) Для справки.


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