Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   набор вложенных элементов (DIV) пропадает (https://javascript.ru/forum/misc/80450-nabor-vlozhennykh-ehlementov-div-propadaet.html)

WadimS 06.06.2020 12:20

набор вложенных элементов (DIV) пропадает
 
Динамически в функции JS формируется набор вложенных в существующий "невидимый visibility: hidden;" DIV.
<div id="невидимый div" style="visibility: hidden"></div>


Сама функция:
function createPage(){
..........
for (....) {
let page = document.createElement('div');
page.setAttribute('id','story_'+xxx);
page.setAttribute('story_id', xxx);
document.getElementById('невидимый div').appendChild(page);
};
getBook();


В отладчике, разумеется, присутствуют все сформированные элементы с заданными атрибутами.

Формируемая функция вызывает в конце другую функцию, которая должна отрабатывать со списком сформированных DIV. И вот тут наступает кердык: вызываемая функция нихрена не видит, а на подсчет кол-ва вложенных элементов
pages = elem.getElementsByTagName('div')
говорит, что их тама нету вовсе, возвращая 0. Соответственно никакого перебора элементов нету, ибо нехрен перебирать.:(
functuin getBook() {
let elem = document.getElementById('невидимый div');
let pages = elem.getElementsByTagName('div'); // все div внутри "невидимого" div == 0, хотя их внутри родителя > 20
alert('pages='+pages.length); // возвращает, зараза, НОЛЬ!!!
for (let page of pages) {	// хотелось бы читать элементы... а их нету!!!
тут чо-то должна была бы делать, а не с чем 
};


Если в первой функции записывать данные в заранее заданный массив, то вторая один хрен ничо в нём не видит...

voraa 07.06.2020 08:59

1. Приведите весь код в нормальном виде. Иначе, получается, что Вы записываете в элемент 'невидимый div' а ищите в элементе
'главный, он же родительский, он же невилимый, div'

2. getElementsByTagName возвращает HTMLCollection. Это не итерируемый объект. К нему нельзя применять for of

WadimS 07.06.2020 15:31

voraa, подскажите, к какой конструкции следует обратиться, чтобы перебрать вложенные элементы?

Аналогичное обращение к структуре UL работает. А то у меня уже крыша едет...
<ul>
<li>xxxx</li>
<li>xxxx</li>
</ul>

let elems = document.getElementsByTagName('li');
for(var i=0; i<elems.length; i++) {
...............
};

Спасибо!

voraa 08.06.2020 07:13

Цитата:

Сообщение от WadimS
Аналогичное обращение к структуре UL работает.

Это не аналогичное.
Нельзя цикл for of.
Нужно так
let pages = elem.getElementsByTagName('div'); 
for (let i = 0; i < pages.length; i++) {   
    let page = pages[i];
    // тут чо-то должна была бы делать
};

WadimS 08.06.2020 09:31

voraa, спасибо!


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