Кто-то сказал мне, если атрибут не определен, указанное значение вернет 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>
Какая ситуация указала return false?
В браузерах никогда. Уровень жизни DOM прямо указывает на это:
атрибут readonly boolean; // бесполезный; всегда возвращает true
Так зачем это? В других контекстах доступ к документам XML осуществляется через DOM API, и, как правило, здесь применяется спецификация DOM 3.
Если атрибуту не было явно задано значение в документе экземпляра, но оно имеет значение по умолчанию, предоставленное схемой, связанной с документом, узел атрибута будет создан с указанным значением в false.
Так что это связано с XML-схемами, где атрибут для элемента имеет значение по умолчанию.
В браузерах specified
свойство существует только для обратной совместимости, потому что есть веб-страницы, которые пытаются использовать это свойство, и JavaScript сломается, если он не вернет истинное значение.
Так как xms
присутствует в теге, то он считается указанным.
На самом деле, я думаю, что атрибуты DOM в тегах без значений по умолчанию считаются логическими атрибутами со значением true
, как hidden
или checked
атрибут.
Я добавил 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;
Просто получите значения атрибута и проверьте, равны ли они 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
var a = btn.getAttributeNode("xms").specified;