Làm thế nào để bạn kiểm tra một yếu tố cho sự tồn tại mà không sử dụng getElementById
phương pháp?
Tôi đã thiết lập một bản demo trực tiếp để tham khảo. Tôi cũng sẽ in mã ở đây:
<!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>
Về cơ bản đoạn mã trên biểu thị một phần tử đang được lưu trữ vào một biến và sau đó bị xóa khỏi DOM. Mặc dù phần tử đã bị xóa khỏi DOM, biến vẫn giữ nguyên phần tử như khi khai báo lần đầu tiên. Nói cách khác, nó không phải là một tham chiếu trực tiếp đến chính phần tử, mà là một bản sao. Kết quả là, kiểm tra giá trị của biến (phần tử) cho sự tồn tại sẽ cung cấp một kết quả không mong muốn.
Các isNull
chức năng là nỗ lực của tôi để kiểm tra một yếu tố tồn tại từ một biến, và nó hoạt động, nhưng tôi muốn biết nếu có một cách dễ dàng hơn để đạt được kết quả tương tự.
Tái bút: Tôi cũng quan tâm đến việc tại sao các biến JavaScript hoạt động như thế này nếu có ai biết về một số bài viết hay liên quan đến chủ đề này.