Phương pháp tốt nhất để truy xuất một mảng các phần tử có một lớp nhất định là gì?
Tôi sẽ sử dụng document.getElementsByClassName nhưng IE không hỗ trợ nó.
Vì vậy, tôi đã thử giải pháp của Jonathan Snook :
function getElementsByClassName(node, classname) {
var a = [];
var re = new RegExp('(^| )'+classname+'( |$)');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
var tabs = document.getElementsByClassName(document.body,'tab');
... nhưng IE vẫn thông báo:
Đối tượng không hỗ trợ thuộc tính hoặc phương thức này
Bất kỳ ý tưởng, phương pháp tốt hơn, sửa lỗi?
Tôi không muốn sử dụng bất kỳ giải pháp nào liên quan đến jQuery hoặc "javascript cồng kềnh" khác.
Cập nhật:
Tôi đã nhận nó để làm việc!
Như @joe đã đề cập , hàm không phải là một phương thức của document
.
Vì vậy, mã làm việc sẽ giống như sau:
function getElementsByClassName(node, classname) {
var a = [];
var re = new RegExp('(^| )'+classname+'( |$)');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
var tabs = getElementsByClassName(document.body,'tab');
... Ngoài ra, nếu bạn chỉ cần hỗ trợ IE8 + thì điều này sẽ hoạt động:
if(!document.getElementsByClassName) {
document.getElementsByClassName = function(className) {
return this.querySelectorAll("." + className);
};
Element.prototype.getElementsByClassName = document.getElementsByClassName;
}
Sử dụng nó giống như bình thường:
var tabs = document.getElementsByClassName('tab');