2010-09-09 63 views
8

jQuery.append()的所有示例似乎都採用一個html字符串並將其附加到容器。我有一個稍微不同的用例。我的服務器將返回我,包含要顯示HTML文本,像一個XML:jQuery附加DOM

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

我有這個地方的內容需要顯示一個div。

我的JS目前執行以下操作:

  1. 加載了XML數據轉換成的jQuery的$。阿賈克斯()成功處理程序:

    VAR jData = $(數據);

  2. 查找標籤的內容,並試圖對其子女添加到應該顯示該事件的DIV:

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

追加()調用失敗,未捕獲的錯誤:WRONG_DOCUMENT_ERR:DOM Chrome上的例外4。調試器顯示值是一個DOM 對象和$(值)是一個對象包含

任何幫助將不勝感激。

謝謝。 -Raj

回答

8

您不能將屬於一個DOM樹的節點附加到另一個文檔。

嘗試clone他們:

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

或者乾脆用自己的文字表述,讓他們重新創建:

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

感謝。克隆()似乎讓我前進。仍然,調用html()會導致錯誤:$(child).clone()。html():TypeError:無法調用未定義的方法'replace' – Raj 2010-09-09 18:08:10

+0

實際上我使用contents()。clone(),它也包含文本節點。 – Raj 2010-09-09 18:29:45

+0

@raj:'.html()'失敗,因爲你在這裏處理一個XML文檔,在所有情況下,jQuery不是100%適合處理XML的。 – Tomalak 2010-09-09 18:29:51