Wie testet man ein Element ohne Verwendung der getElementById
Methode auf Existenz ?
Ich habe eine Live-Demo als Referenz eingerichtet. Ich werde den Code auch hier ausdrucken:
<!DOCTYPE html>
<html>
<head>
<script>
var getRandomID = function (size) {
var str = "",
i = 0,
chars = "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
while (i < size) {
str += chars.substr(Math.floor(Math.random() * 62), 1);
i++;
}
return str;
},
isNull = function (element) {
var randomID = getRandomID(12),
savedID = (element.id)? element.id : null;
element.id = randomID;
var foundElm = document.getElementById(randomID);
element.removeAttribute('id');
if (savedID !== null) {
element.id = savedID;
}
return (foundElm) ? false : true;
};
window.onload = function () {
var image = document.getElementById("demo");
console.log('undefined', (typeof image === 'undefined') ? true : false); // false
console.log('null', (image === null) ? true : false); // false
console.log('find-by-id', isNull(image)); // false
image.parentNode.removeChild(image);
console.log('undefined', (typeof image === 'undefined') ? true : false); // false ~ should be true?
console.log('null', (image === null) ? true : false); // false ~ should be true?
console.log('find-by-id', isNull(image)); // true ~ correct but there must be a better way than this?
};
</script>
</head>
<body>
<div id="demo"></div>
</body>
</html>
Grundsätzlich zeigt der obige Code, dass ein Element in einer Variablen gespeichert und dann aus dem DOM entfernt wird. Obwohl das Element aus dem DOM entfernt wurde, behält die Variable das Element bei, wie es beim ersten Deklarieren war. Mit anderen Worten, es handelt sich nicht um eine Live-Referenz auf das Element selbst, sondern um eine Nachbildung. Infolgedessen führt das Überprüfen des Werts der Variablen (des Elements) auf Existenz zu einem unerwarteten Ergebnis.
Die isNull
Funktion ist mein Versuch, anhand einer Variablen zu prüfen, ob Elemente vorhanden sind, und sie funktioniert. Ich möchte jedoch wissen, ob es einen einfacheren Weg gibt, dasselbe Ergebnis zu erzielen.
PS: Ich bin auch daran interessiert, warum sich JavaScript-Variablen so verhalten, wenn jemand einige gute Artikel zum Thema kennt.