Как получить элемент в дочернем массиве DOM, который возвращается в getElementsByTagName

Карта Alt Key в Vim на Mac OSx:

Начните с просмотра кода ключа, который ваш терминал отправляет в vim:

$ sed -n l
^[[1;9D 

В приведенном выше примере я запустил и нажмите Alt + Left.

^[[1;9D - это экранированная последовательность, отправляемая в vim, поэтому мы можем использовать ее для нашего сопоставления.

map <Esc>[1;9D 
-2
задан Gajini 28 February 2019 в 09:30
поделиться

1 ответ

Причина в том, что эти svg элементы, очевидно, добавляются в документ асинхронно. К тому времени, когда вы смотрите на консоль и открываете структуру svgs, элементы svg уже загружены, но это не имело место в тот момент, когда ваш код запускался и создавал массив. Вы видите их из-за ленивой загрузки консоли .

Если элементы svg загружаются при загрузке страницы, то вам может повезти, и вы можете просто обернуть свой код во что-то вроде:

window.onload = () => { /* your code */ }

Но, скорее всего, этот контент загружен через некоторые Ajax-вызовы, и вышеописанное не поможет.

Вы можете прослушивать события мутации DOM:

const svgs = document.getElementsByTagName('svg');
console.log(svgs.length); // <-- presumably outputs 0

const listener = new MutationObserver(updated);
// This listens to changes under the BODY element. If you can be more 
// precise, then do so (to save resources). If you can do without
// the subtree option, then that is also preferred:
listener.observe(document.body, { childList: true, subtree: true });

function updated() {
    console.log(svgs.length); // <-- notice the increased length
    // Do whatever else you want to do with this collection.

    // If you are sure you have all you need, then stop the listener:
    listener.disconnect();
}

Если элементы заполнены все «сразу», и вы просто хотите один вызов прослушивателя событий, то вам все равно может потребоваться его настройка. с некоторым шаблоном ослабления .

0
ответ дан trincot 28 February 2019 в 09:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: