JS Tôi đã sử dụng jQuery để làm điều này:Vòng qua tất cả hậu duệ của một div - chỉ
$element.find("*").each(function() {
var $this = $(this);
$this.removeAttr("style width align");
if ($this.is("embed")) {
$element.append("<div class='video'></div>");
$this.attr("width", 640).attr("height", 360).parent().appendTo("#" + element + " .video");
};
});
Nhưng tôi đã đọc rằng phương pháp .each()
jQuery là khá chậm khi so sánh với một đơn giản cho vòng lặp (jsPerf). Câu hỏi của tôi là làm thế nào tôi có thể bắt chước điều này với JS thuần túy? Tìm tất cả các phần tử trong một div
, sau đó lặp qua các nút.
Tôi đã cố gắng tìm kiếm điều này nhưng tất cả những gì tôi có thể tìm thấy là câu trả lời jQuery - ở mọi nơi.
Tôi đã thử những thứ khác nhưng điều này là càng gần như tôi phải chọn tất cả con cháu:
var children = document.getElementById('id').getElementsByTagName('*');
for(var i = 0; i<children.lengtth; i++){
children[i].removeAttribute("style");
console.log(children[i]);
}
lý do cho sự tồn tại của jquery là chính xác này ... nó có thể chậm hơn (cách chăm sóc ...) nhưng nó sẽ làm việc trên tất cả các trình duyệt ... bạn có thực sự muốn lặp dom cây và làm cho nó hoạt động trong tất cả các trình duyệt? – Rufinus
[] .slice.call (elm.children) cung cấp cho bạn một mảng các phần tử con, trong khi [] .slice.call (elm.childNodes) bao gồm các nút văn bản.getElementsByTagName() sẽ đi sâu hơn so với trẻ em trực tiếp, nếu đó là những gì bạn muốn. – dandavis
Có vấn đề gì với giải pháp vanilla JS của bạn? –