DOM дочерний тэг

Я пытаюсь использовать JavaScript для обхода дочерних узлов взрослого и изменения свойств по мере необходимости. Код зависает в elemtree.tagName, сообщая, что у объекта нет этого свойства. Я прочитал о свойствах DOM, а tagName было объявлено как свойство DOM. Почему бы это не было признано?

код ниже:

   elemtree = elem.firstChild;
    while (elemtree != null) {
        if (elemtree.tagName.toLowerCase() == "img") {
            elemtree.src = img;
        }
        else {
            elemtree.display = display;
        }
        elemtree = elemtree.nextSibling;
    }

2 ответа

Решение

elemtree.nextSibling включает в себя узлы text и comment, которые имеют nodeName но нет tagName имущество.

Решения:

  1. использование elem.firstElementChild а также elemtree.nextElementSiblingвместо этого (возможные проблемы совместимости браузера).
  2. использование nodeName вместо tagName,
  3. Проверить на наличие tagName перед его использованием:

    if (elemtree.tagName && elemtree.tagName.toLowerCase() == "img") {
    

Я согласен с Робом В., что лучшее решение - это избегать узлов без свойства для начала, однако вы также можете рассмотреть возможность изменения:

if (elemtree.tagName.toLowerCase() == "img")

в

if (elemtree.tagName && elemtree.tagName.toLowerCase() == "img")

Таким образом, если свойство не существует, оно не выдаст ошибку.

Другие вопросы по тегам