5

我一直在使用 jQuery 创建 HTML 元素,然后将它们添加到 XML 文档中,如下所示:

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>

这是 JSFiddle 链接。不幸的是,我有两个问题。

  1. 当我尝试创建一个名称为 like 的元素时child,它正确地创建了一个带有 tagName 的元素child。但是,如果我使用 name image,出于某种原因 jQuery 认为我想要创建一个img元素。如何阻止 jQuery 这样做?

  2. 所有子元素都会自动添加属性xmlns="http://www.w3.org/1999/xhtml",即使我生成的文档不是 XHTML 文档。我该如何阻止这种情况发生?

更新:

图像 tagName 问题似乎是 DOM 的问题,而不是 jQuery 的问题,如下代码所示:

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

1 回答 1

4

image是 的同义词imgdocument.createElement('image')实际上创建了一个img元素,就像我在这个问题中解释的那样。

尽管如此,所有的希望都没有丧失。当您将 HTML/XML 字符串传递给jQuery时,第二个参数是要解析的元素的所有者文档。

由于您在第一步中已经创建了一个 XML 文档对象,我相信

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

将使用createElementXML 文档的方法并创建正确的元素。

注意:在内部,jQueryjQuery.parseHTML在传递这样的字符串时使用,因此此方法可能并不总是有效。看起来 jQuery 始终使用传入的文档(上下文)。它当然应该适用于单个标签。

更安全(也许更容易?)可能只是使用:

var imgeEl = $(doc[0].createElement('image'));
于 2013-02-20T21:42:33.700 回答