DOM указан Свойство return true

1

Кто-то сказал мне, если атрибут не определен, указанное значение вернет false. У атрибута xms не было определения, но указано return true. Какая ситуация указала return false?

<!DOCTYPE html>
<html>
<body>

<p>Click the button find out if the button has an onclick attribute specified.</p>

<button onclick="myFunction()" class="" xms >Try it</button>

<p id="demo"></p>
<p id="demo2"></p>
<p id="demo3"></p>
<script>
function myFunction() {
    var btn = document.getElementsByTagName("BUTTON")[0];
    var x = btn.getAttributeNode("onclick").specified;
    document.getElementById("demo").innerHTML = x;

        var y = btn.getAttributeNode("class").specified;
    document.getElementById("demo2").innerHTML = y;

        var z = btn.getAttributeNode("xms").specified;
    document.getElementById("demo3").innerHTML = z;

}
</script>

</body>
</html>
Теги:
dom

4 ответа

0

Какая ситуация указала return false?

В браузерах никогда. Уровень жизни DOM прямо указывает на это:

атрибут readonly boolean; // бесполезный; всегда возвращает true

Так зачем это? В других контекстах доступ к документам XML осуществляется через DOM API, и, как правило, здесь применяется спецификация DOM 3.

DOM 3 говорит:

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

Так что это связано с XML-схемами, где атрибут для элемента имеет значение по умолчанию.

В браузерах specified свойство существует только для обратной совместимости, потому что есть веб-страницы, которые пытаются использовать это свойство, и JavaScript сломается, если он не вернет истинное значение.

0

Так как xms присутствует в теге, то он считается указанным.

На самом деле, я думаю, что атрибуты DOM в тегах без значений по умолчанию считаются логическими атрибутами со значением true, как hidden или checked атрибут.

0

Я добавил 3 команды оповещения и получаю результаты, как показано ниже.

var z = btn.getAttributeNode("xms").specified;
alert (btn.getAttributeNode("xms").nodeName);   //display xms
alert (btn.getAttributeNode("xms").nodeValue);   //display nothing
alert (btn.getAttributeNode("xms").innerHTML);    //display undefined
document.getElementById("demo3").innerHTML = z;
0

Просто получите значения атрибута и проверьте, равны ли они undefined.

var x = btn.getAttributeNode("onclick");
if (x !== undefined)
    document.getElementById("demo").innerHTML = x;

EDIT: проверить, существует ли узел, и он имеет реальное значение

var a = btn.getAttributeNode("xms").specified;
var b = btn.getAttributeNode("xms").nodeValue;
if (!a || a===undefined || b=='') //It like false, because the node doesn't exists or its value is empty
  • 0
    Основная проблема в том, что z = true, однако xms не определен.
  • 0
    @AndyTang Я думаю, что проблема в том, что он не определен, но отображается в теге кнопки, поэтому он существует, поэтому его 'true. Возможно, вам следует дважды проверить его, поэтому сначала проверьте, существует ли он, затем возьмите его значение и проверьте, является ли он неопределенной или пустой строкой. Если это так, вы должны относиться к нему как к ложному ответу. var a = btn.getAttributeNode("xms").specified;
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню