| 
	| 
	
	| 
		
	| 
			
			 
			
				24.07.2018, 14:57
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 01.12.2016 
						Сообщений: 3,650
					 
		
 |  |  
	| хоть и не 'кеширование' если нужно много переменных объявить, бывает использую такую конструкцию. 
['block1','block2','block22','block23'].forEach(el=> window[el] = document.querySelectorAll('.'+el));
 |  |  
	| 
		
	| 
			
			 
			
				25.07.2018, 11:37
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 06.08.2017 
						Сообщений: 473
					 
		
 |  |  
	| 
	
 
	| Сообщение от j0hnik   |  
	| хоть и не 'кеширование' если нужно много переменных объявить, бывает использую такую конструкцию. 
 
['block1','block2','block22','block23'].forEach(el=> window[el] = document.querySelectorAll('.'+el));
 |  
	
 Не знаю является ли это самым оптимальным решением, но мне оно нравится. Я логику понял и тестово обкатал на All и просто querySelector - работает. 
Спасибо что поделились, давно ломал голову в поиске подобного решения. |  |  
	| 
		
	| 
			
			 
			
				25.07.2018, 12:52
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 04.12.2012 
						Сообщений: 3,841
					 
		
 |  |  
	| MC-XOBAHCK,  
	
 
	| Сообщение от MC-XOBAHCK |  
	| давно ломал голову в поиске подобного решения |  
	
 Так вы захламите глобальный объект window, да и к чему делать подобные переменные глобальными? 
По-моему код j0hnik 'а лучше так переписать:
 
const concreteBlocks=['block1','block2','block22','block23'].reduce(function(result,className){
	return result[className]=[].slice.call(document.querySelectorAll('.'+className)), result;
},{});
concreteBlocks.block1.forEach(function(node){
  node.style.background='#F00';
});
 |  |  
	| 
		
	| 
			
			 
			
				25.07.2018, 13:29
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 06.08.2017 
						Сообщений: 473
					 
		
 |  |  
	| Nexus, да, есть такое
 
window == document  // => false
window > document          // => true
 
Открыл в консоле window  и увидел что document  является свойством window.
 
 
А можно спросить, а то у меня проблемы с пониманием и я теряюсь. 
У вас в начале строки идут квадратные скобки [] (у меня есть подобное в решениях подсказанных здесь на форуме):
 
[].slice.call(document.querySelector......
 
Мне вот только мысль пришла - квадратные скобки это пустой массив ? Или это что то другое? |  |  
	| 
		
	| 
			
			 
			
				25.07.2018, 13:39
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| 
	
 
	| Сообщение от MC-XOBAHCK |  
	| квадратные скобки это пустой массив |  
	
 по феншую тут должно быть Array.prototype |  |  
	| 
		
	| 
			
			 
			
				25.07.2018, 14:05
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 27.11.2015 
						Сообщений: 2,899
					 
		
 |  |  
	| MC-XOBAHCK, 
 document.querySelectorAll -это коллекция, не вполне массив. Многие методы массивов с коллекцией не работают. 
Поэтому их приходится использовать с такой конструкцией
 
[].slice.call(document.querySelectorAll......
 
т.е метод slice применяется к настоящему пустому массиву и вызывается для коллекции |  |  
	| 
		
	| 
			
			 
			
				25.07.2018, 14:23
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 25.10.2016 
						Сообщений: 1,013
					 
		
 |  |  
	| Надо сказать, что коллекция NodeList (результат document.querySelectorAll и т.п.) постепенно становится "как массив", например, тот же forEach в ней давно есть почти во всех браузерах, да и полифилится в одну строку.
 Потому превращать её в массив, имхо, незачем. Если что, можно и на самой коллекции через call использовать любой метод из Array.prototype.
 
 Вот если бы это было, например, document.getElementsBy***, то да, смысл был бы, ибо там "живая коллекция", и вдруг её надо будет зафиксировать. Но все эти методы, по моему, отмирающая ветвь эволюции. А понадобиться они могут, если нам нужна как раз именно "живая колекция", т.е. slice опять не при делах..
 |  |  
	| 
		
	| 
			
			 
			
				25.07.2018, 17:34
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 06.08.2017 
						Сообщений: 473
					 
		
 |  |  
	| Спасибо всем за науку.Дочитаю книгу которую посоветовали и буду дальше продолжать учить и практиковать JS.
 |  |  
 
 
 
 |  |