2010-08-06 45 views
1

我們使用jQuery來生成XML片段,然後使用html()函數將其轉換爲字符串。但正如我們剛剛發現的那樣,如果有人不知道,那麼在IE中實現的JavaScript函數就會被破壞,破壞,破壞。基本上,它會利用一些標籤,在「幫助」(在我們的例子中)給其他人增加屬性,而且通常不會做正確的事情。讓jQuery與另一個庫一起工作(XML解析)

我想用這樣的事情來生成XML字符串,而不是:

http://www.stainlessvision.com/jquery-html-vs-innerxhtml

然而,該庫將無法很好地與jQuery玩開箱,例如:

var $dummyRoot = $('<dummyroot/>'); // since html() doesn't generate the outer element 
var $foo = $('<foo></foo>'); 
var $font = $('<font ></font >'); 
$foo.append($font); 
$dummyRoot.append($foo); 
var $s = innerXHTML($dummyRoot); // <-- Doesn't work 

我認爲它想要更多的W3C DOM-ish對象。

如何讓jQuery與此innerXHTML()函數對話;或者,也可以使用另一個函數(也許內置於jQuery或jQuery插件中))?

編輯:跟進DDaviesBrackett的問題。我的XML中也有一個「body」元素;看看它如何拾取CSS樣式(而不僅僅是一個元素)。

是否存在一個不成文的規則,在元素名稱爲body,font,head等的DOM內部不生成XML?

var $dummyRoot = $('<dummyroot/>'); 
var $foo = $('<foo></foo>'); 
var $body = $('<body></body>'); 
var $font = $('<font></font>'); 
$body.append($font); 
$foo.append($body); 
$dummyRoot.append($foo); 

var $s = innerXHTML($dummyRoot[0]); 

// $s equals "<foo><body bottommargin="15" leftmargin="10" rightmargin="10" topmargin="15"><font size="+0"></font></body></foo>" 

回答

1

jQuery對象包裝其內容,但通過數組索引器公開它們。你用什麼來得到

var $s = innerXHTML($dummyRoot[0]); 

而不是你的榜樣?

+0

見更新我的問題函數名。 – 2010-08-06 23:55:56

0

是否有一個不成文的規則,不在DOM中生成其元素具有像body,font,head等名稱的XML?

jQuery的依賴於innerHTML屬性來解析給定的一段文字,並從該構建DOM。它從來不是要分析或生成XML,因爲根據瀏覽器的看法,碰撞名稱可能會給出完全不可預知的結果。

我已經給了一個similar answer在使用遞歸的方法更少的步驟生成正確的XML。創建以下XML:

<foo> 
    <body> 
     <font></font> 
    </body> 
</foo> 

你可以這樣寫:

Σ('foo', 
    Σ('body', 
     Σ('font', '') 
    ) 
); 

Σ只是看起來涼爽,但你可以改變任何你想要:)

+0

我仔細看了一下你的酷西格瑪運算符,但我想知道如果我必須循環訪問現有的數據結構,我將如何使用它來生成XML。到目前爲止,您的所有示例(這裏和其他問題)都是靜態地執行XML構建。 – 2010-08-07 00:36:49

+0

這裏只有三個基本元素 - 'createElement','createTextNode'和'appendChild'。前兩個需要創建節點的文檔對象,最後一個需要添加新節點的父節點。我將嘗試更新用於動態生成XML的示例。 – Anurag 2010-08-07 01:32:01