2013-02-20 32 views
5

我已經使用jQuery創建HTML元素,然後將它們添加到一個XML文檔,例如:jQuery的創建用於圖像標記不正確元件

var doc = $($.parseXML('<?xml version="1.0" encoding="UTF-8"?><root/>')); 
var docRoot = doc.find("root"); 
var childEl = $("<child>"); 
docRoot.append(childEl); 
var imageEl = $("<image>"); 
docRoot.append(imageEl); 

var xmlString = doc.context.xml || 
       new XMLSerializer().serializeToString(doc.context); 
$("#xml").text(xmlString); 

這是輸出(在Chrome 24):

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <child xmlns="http://www.w3.org/1999/xhtml"></child> 
    <img xmlns="http://www.w3.org/1999/xhtml" /> 
</root> 

Here's the JSFiddle link.不幸的是,我有兩個問題。

  1. 當我嘗試創建一個像child名稱的元素,它正確地創建與標記名child一個元素。但是,如果我使用名稱image,出於某種原因,jQuery認爲我想製作一個img元素。如何阻止jQuery執行此操作?

  2. 即使生成的文檔不是XHTML文檔,所有子元素都會自動添加屬性xmlns="http://www.w3.org/1999/xhtml"。我如何阻止這種情況發生?

更新:

圖像的tagName問題似乎是與DOM,jQuery的不是一個問題,因爲this code表明:

var el = document.createElement("image"); 
$("#output").append(el.tagName); // Outputs "IMG" 
+0

你嘗試將它像變種imageEl = $( 「」); ? – Derek 2013-02-20 21:27:09

+0

@Derek:沒有效果。問題似乎與'createElement'而不是jQuery。 – cdmckay 2013-02-20 21:28:24

+1

這一切都正確。 'image'是HTML中'img'的別名。嘗試明確地將所有者文檔設置爲XML文檔:'var imageEl = $(「」,doc);'(我真的不知道這是否有效,這將是我的猜測)。 – 2013-02-20 21:30:09

回答

4

imageimg的代名詞。 document.createElement('image')實際上創建了一個img元素,就像我在this question中解釋的那樣。

不過,所有的希望都不會丟失。當您將HTML/XML字符串傳遞給jQuerythe second argument is the owner document要分析的元素時。

既然你已經在你的第一個步驟中創建一個XML文檔對象,我相信

var imageEl = $("<image />", doc[0]); 

將使用XML文檔的方法createElement,並創建正確的元素。

注意:在內部,jQuery uses jQuery.parseHTML when passed such a string,所以這種方法可能並不總是工作。看起來,雖然jQuery一貫使用傳入的文檔(上下文)。它肯定適用於單個標籤。

更安全的(也許更容易嗎?)可能是隻使用:

var imgeEl = $(doc[0].createElement('image')); 
+0

下面是最終的JSFiddle有兩個問題:http://jsfiddle.net/bMDNp/3/ – cdmckay 2013-02-21 15:07:57

+0

此外,'doc [0]'不是必需的。只需傳遞jQuery'doc'對象即可。 – cdmckay 2013-02-21 15:09:48

+0

@cdmckay:是的,但我希望它與第二個例子一致。 – 2013-02-21 15:11:38