2014-12-12 2 views
2
document.addEventListener('DOMContentLoaded', function() { 
    if (document.getElementsByClassName('myclass').length) { 
     doSomething(); 
    } 
}); 

Это работает, если <div class="myclass">...</div> прямо написано в HTML документе, но если он вставлен самая JavaScript. Есть идеи?Проверьте, динамически добавляемый класс существует

+1

Я полагаю, ваша проблема в том, что класс получает добавлен * после * ваш 'DOMContentLoaded 'событие было запущено. –

ответ

3

Хорошо, подумайте о том, что вы делаете с слушателем. Вы запускаете этот код при возникновении события DOMContentLoaded. Если вы меняете DOM в других местах, нет гарантии, что этот код будет запущен впоследствии. Фактически, если вы вручную не излучаете это событие, it seems like он будет работать только один раз на странице.

Однако, поскольку я не знаю, как выглядит код, который добавляет классы во время выполнения, я не могу быть более конкретным.

В качестве примера, следующий код создает «РОМ загруженную», но не «класс найден!»:

document.getElementById("foo").className = "myclass"; 

document.addEventListener('DOMContentLoaded', function() { 

    alert('dom loaded'); 

    if (document.getElementsByClassName('myclass').length) { 
     alert('My class is found!'); 
    } 
}); 

И следующий код производит и, как и ожидалось.

document.addEventListener('DOMContentLoaded', function() { 

    alert('dom loaded'); 

    document.getElementById("foo").className = "myclass"; 

    if (document.getElementsByClassName('myclass').length) { 
     alert('My class is found!'); 
    } 
}); 

Чтобы показать вам, что я имею в виду, вот plunkr ссылки:

working

not working

+0

Спасибо! Что, если не только класс добавляется динамически, но даже элемент div? – santa

+1

Это не должно быть проблемой, пока ваша функция вызывается в нужное время. Просто помните, что при загрузке страницы выдается «DOMContentLoaded». Если вы хотите захватить кучу вещей, которые вы добавите впоследствии, вам нужно будет использовать другой прослушиватель событий или иначе вызвать функцию другим способом. EDIT: TLDR: getElementsByClassName не заботится о том, откуда что-то происходит, если он находится на DOM, он найдет его. Его просто нужно вызвать в нужное время. – Mallen

+1

Какой альтернативный прослушиватель событий вы бы предложили? – santa

0

Используйте className.indexOf

myElement = document.getElementById("IdOfTheElement"); 

if(myElement.className.indexOf('MyClassName') != -1){ 
    /* The class exist*/ 
} 
+0

Что такое 'myElement'? – santa

+0

Является объектом: вы можете получить его getElementById или аналогичным – MartaGom

+0

Предполагая, что он хочет вытаскивать объекты по классам, как следует из этого вопроса, это не очень помогает ему. – Mallen

Смежные вопросы