2012-11-13 39 views
10

Trong JavaScript, có cách nào để thêm một mảng các nút con vào một nút cha trong một thao tác không?Làm cách nào để nối thêm một loạt các nút con vào nút cha trong một thao tác bằng JavaScript?

Tôi muốn thực hiện thao tác này trong một thao tác để ngăn chặn các bản sao không cần thiết.

Tôi đã thử cha mẹ .appendChild(arrayOfNodes), nhưng điều đó mang lại một ngoại lệ.

Tôi đang tạo một thành phần nhỏ sẽ được sử dụng lại trong một số dự án, tôi không muốn phụ thuộc vào bất kỳ thư viện nào như jQuery hay Zepto.

+1

Chỉ cần ra khỏi tò mò (trừ khi đó là một hạn chế dự án) tại sao không có ** jQuery **? – adamb

+0

Tôi đang làm một compoent tái sử dụng, và tôi có thể giả sử rằng jQuery hoặc Zepto được sử dụng trong dự án đó, do đó, nó phải là tiêu chuẩn JavaScript –

Trả lời

1

Bạn có thể thêm một phương pháp để Node, đó gọi phương thức appendChild trong nội bộ:

(function() { 
    Node.prototype.appendChildren(arrayOfNodes) { 
    var length = arrayOfNodes.length; 
    for (var i = 0; i < length; i++) { 
     this.appendChild(arrayOfNodes[i]); 
    } 
    }()); 

Mà sau đó sẽ sử dụng được như vậy:

node.appendChildren(arrayOfNodes) 
+0

'Node.prototype' không tồn tại trong IE <9. –

9

Bạn có thể sử dụng một trung gian DocumentFragment, đó là một chút phức tạp nhưng có khả năng hoạt động tốt hơn làm một nút tại một thời điểm nếu bạn đang thêm các nút mới được tạo vào một nút hiện có trong tài liệu:

var frag = document.createDocumentFragment(); 
for (var i = 0; i < arrayOfNodes.length; ++i) { 
    frag.appendChild(arrayOfNodes[i]); 
} 
someElement.appendChild(frag); 
+0

Tôi khá chắc chắn bạn sẽ muốn làm someElement.appendChild (frag.cloneNode (true)). Không chắc chắn tại sao, nhưng đó là những gì John Resig nói, và tôi có xu hướng tin tưởng anh ta. – hobberwickey

+0

@hobberwickey: Tôi không, nhưng tôi không thể tưởng tượng anh ta đề nghị rằng ở đây anyway: không cần phải sao chép, và nếu có xử lý sự kiện trên các nút được chèn vào sau đó chèn nhái thay vào đó chắc chắn là sai. –

+0

@hobberwickey: Lý do duy nhất để sao chép sẽ là nếu bạn muốn chèn một số bản sao của cùng một tập hợp các nút vào tài liệu, không bắt buộc ở đây. Bài viết của Resig không rõ ràng về điểm này, thật không may. –

1

Tôi biết đây là loại cũ nhưng tôi đã có một câu hỏi tương tự. Tôi quyết định viết một hàm đơn giản có nút cha mẹ (nút) và nút con (nodeList hoặc mảng nút), không mở rộng bất kỳ nguyên mẫu nào hoặc khiến nó phức tạp hơn ...

function appendChildren(parent, children) { 
    for (var i=0; i<children.length;i++) { 
     child = children[i]; 
     parent.appendChild(child); 
    } 
    return parent; 
} 
+0

Chỉ cần thêm 'Element.prototype.appendChildren = appendChildren;' và xóa 'parent' arg, nó sẽ là' this' – Guja1501

Các vấn đề liên quan