хоть и не 'кеширование' если нужно много переменных объявить, бывает использую такую конструкцию.
['block1','block2','block22','block23'].forEach(el=> window[el] = document.querySelectorAll('.'+el)); |
Цитата:
Спасибо что поделились, давно ломал голову в поиске подобного решения. |
MC-XOBAHCK,
Цитата:
По-моему код 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'; }); |
Nexus, да, есть такое
window == document // => false window > document // => true Открыл в консоле window и увидел что document является свойством window. А можно спросить, а то у меня проблемы с пониманием и я теряюсь. У вас в начале строки идут квадратные скобки [] (у меня есть подобное в решениях подсказанных здесь на форуме): [].slice.call(document.querySelector...... Мне вот только мысль пришла - квадратные скобки это пустой массив? Или это что то другое? |
Цитата:
|
MC-XOBAHCK,
document.querySelectorAll -это коллекция, не вполне массив. Многие методы массивов с коллекцией не работают. Поэтому их приходится использовать с такой конструкцией [].slice.call(document.querySelectorAll...... т.е метод slice применяется к настоящему пустому массиву и вызывается для коллекции |
Надо сказать, что коллекция NodeList (результат document.querySelectorAll и т.п.) постепенно становится "как массив", например, тот же forEach в ней давно есть почти во всех браузерах, да и полифилится в одну строку.
Потому превращать её в массив, имхо, незачем. Если что, можно и на самой коллекции через call использовать любой метод из Array.prototype. Вот если бы это было, например, document.getElementsBy***, то да, смысл был бы, ибо там "живая коллекция", и вдруг её надо будет зафиксировать. Но все эти методы, по моему, отмирающая ветвь эволюции. А понадобиться они могут, если нам нужна как раз именно "живая колекция", т.е. slice опять не при делах.. |
Спасибо всем за науку.
Дочитаю книгу которую посоветовали и буду дальше продолжать учить и практиковать JS. |
Часовой пояс GMT +3, время: 11:58. |