2010-09-09 37 views
8

Tất cả các ví dụ của jQuery.append() dường như nhận một chuỗi html và nối nó vào một vùng chứa. Tôi có một trường hợp sử dụng hơi khác. Máy chủ của tôi trả về cho tôi một XML có chứa văn bản HTML sẽ được hiển thị, chẳng hạn như:jQuery chắp thêm DOM

<event source="foo"> 
    <contents> 
     <h1>This is an event</h1> 
     This is the body of the event 
    </contents> 
</event> 

Tôi có một div nơi nội dung này cần được hiển thị.

My JS hiện nào sau đây:

  1. tải lên các dữ liệu XML vào jQuery trong $ .ajax() xử lý thành công:

    var jData = $ (dữ liệu);

  2. Tìm thẻ nội dung và cố gắng thêm con của nó để div đó là nghĩa vụ để hiển thị sự kiện:

    var contents = jData.find("contents"); 
    if(contents != null) 
    { 
        $(contents).children().each(function(index, value) 
        { 
        $("#eventDiv").append($(value)); 
        }); 
    } 
    

Các append() gọi không thành công với của router Lỗi: WRONG_DOCUMENT_ERR: DOM Ngoại lệ 4 trên Chrome. Các chương trình gỡ rối cho thấy giá trị là một DOM tử đối tượng và $ (giá trị) là một Object chứa tử.

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn. -Raj

Trả lời

8

Bạn không thể chắp thêm các nút thuộc về một cây DOM vào một tài liệu khác.

Cố gắng clone họ:

$("#eventDiv").append(jData.find("contents").children().clone()); 

hoặc đơn giản là sử dụng đại diện văn bản của họ để họ có tái tạo:

$("#eventDiv").append(jData.find("contents").html()); 
+0

Cảm ơn. Clone() dường như di chuyển tôi về phía trước. Tuy nhiên, gọi html() gây ra lỗi: $ (con) .clone(). Html(): TypeError: Không thể gọi phương thức 'thay thế' không xác định – Raj

+0

thực sự tôi sử dụng nội dung(). Clone() cũng bao gồm các nút văn bản. – Raj

+0

@raj: '.html()' không thành công vì bạn đang xử lý một tài liệu XML ở đây và jQuery không được trang bị 100% để xử lý XML trong mọi trường hợp. – Tomalak

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