Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   querySelectorAll / is not a valid selector (https://javascript.ru/forum/xhtml-html-css/62458-queryselectorall-not-valid-selector.html)

рони 19.04.2016 23:41

Alexander Belov,
забыть что есть getElementsByClassName и переписать код.

Alexander Belov 20.04.2016 00:08

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

element.classList.contains("smth") ?

рони 20.04.2016 01:31

Alexander Belov,
если сложно с динамическим списком ... а так пишите как хотите ... плохая локализация проблемы ... сложно угадать, что вы не так творите.

Alexander Belov 01.05.2016 22:59

Чтобы не создавать новую тему, отпишу сюда. Табы на добавление-удаление работают как нужно. Единственное, если удалить последнюю табу, то консоль выдаёт ошибку:
Uncaught TypeError: Cannot read property 'classList' of null
//Remove tab
	function removeTab(nodeArr) {
		return function(){
			nodeArr.forEach(function(el) {
                el.parentNode && el.parentNode.removeChild(el);
       		 });	

			setTimeout( function() {
		                tabs.querySelector("*").classList.add("active");
				defaultDiv.querySelector("*").classList.add("active");
		    }, 0);
	    };
	}


Это она ругается на строчки в функции setTimeout, когда последнюю табу удаляем, их же больше не остаётся. Логично было предположить, что создав условие типа
if (tabs.childNodes.length) {
          tabs.querySelector("*").classList.add("active");
   }


можно было бы избежать ошибки, но консоль как игнорирует условие и однозначно выдаёт ошибку и с if, и без него.
Что в данном случае сделано не правильно?
Как избежать ошибки в консоли при удалении последней табы?

Ссылка на JS Bin

рони 01.05.2016 23:14

Alexander Belov,
а что происходит в setTimeout, откуда и зачем это возникло, и что вы хотите найти * этим селектором?

рони 01.05.2016 23:25

Цитата:

Сообщение от Alexander Belov
if (tabs.childNodes.length)

children

Alexander Belov 02.05.2016 01:49

Цитата:

Сообщение от рони (Сообщение 415457)
Alexander Belov,
а что происходит в setTimeout, откуда и зачем это возникло, и что вы хотите найти * этим селектором?

Честно говоря, не совсем сам понимаю, почему оно работает. setTimeout для того, чтобы функция сработала после прорисовки DOM.
А селектор по факту выбирает первый child у tabs, если таковой имеется. Но почему использован *, я не понимаю. По логике он ведь должен выбирать всех детей вообще. Это решение мне подсказали, но не объяснили.

С children всё отлично работает - благодарю!


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