2013-09-08 6 views
1

Мой скрипт отлично работает, когда все элементы, которые я ищу, объявляются, но я не могу на всю жизнь выяснить, как проверить, существует ли элемент или нет.Проблемы с тестированием, если существует XML-элемент

$placeHolder.getElementsByTagName(tagname)[0].firstChild.data; // works if the element exists 

Я попытался тестируя эти строки кода:

if (!($placeHolder.getElementsByTagName(tagname)[0].firstChild.data in window)) //always true 
{ 
    alert("this doesn't exist"); 
    return $noValue; 
} 
else 
    return $placeHolder.getElementsByTagName(tagname)[0].firstChild.data; 

Даже если элемент существует, если заявление верно и выполняет первый блок кода, если он не существует его просто генерирует ошибку, говорящую, что '$ placeHolder.getElementsByTagName (tagname) [0] .firstChild.data' не определено.

Далее я попробовал этот метод:

if (typeof $placeHolder.getElementsByTagName(tagname)[0].firstChild.data == "undefined") 
    { 
     alert("this doesn't exist"); 
     return $noValue; 
    } 
    else 
     return $placeHolder.getElementsByTagName(tagname)[0].firstChild.data; 

Это одна на самом деле работает правильно, если элемент существует, но по-прежнему дает ту же ошибку, что и один над ним.

Я попытался сделать блок catch try, но я столкнулся с той же проблемой, когда вам нужно было проверить, был ли элемент неопределенным. D: <

Все, что мне нужно, это простой способ увидеть, существует ли этот элемент (т. Е. Если он или не является неопределенным.) Есть ли метод, о котором я не знаю, или я делаю что-то неправильно ?

EDIT2: делать $placeHolder.getElementsByTagName(tagname).length

работает, если элемент не определен, но если это элемент, как это: <anElement></anElement>

$ placeHolder.getElementsByTagName (тэг) .length возвращает истину, и выполняет инструкцию, когда в элементе ничего нет. Пробуя этот тест:

if ($placeHolder.getElementsByTagName(tagname)[0].firstChild.data == null) 

также не работает.

ответ

1

Прежде всего, необходимо проверить, есть ли элементы с определенным tagname в вашем $placeHolder. getElementsByTagName возвращает NodeList, так что вы можете проверить его length, таким образом:

if($placeHolder.getElementsByTagName(tagname).length > 0) 
+0

ДА! Это сработало! Мне следовало бы проверить длину массива, другая часть моего кода использует атрибут длины ... –

+0

@ user2419560 отлично, рад, что это помогло! – Cherniv

+0

Что бы я сделал, если элемент есть, но в нем ничего нет? Как

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