使用jQuery添加XML DOM元素 - 是否可能?

时间:2011-06-28 22:44:38

标签: jquery xml ajax xmldom

我正在尝试使用jQuery来操作我用ajax加载的XML文件的DOM。我可以选择元素,清空它们并删除它们,但不能添加它们。

jQuery很少让我失望,但我感到被烧毁并被击败。请帮忙。

代码:

<script type="text/javascript">

$.ajax({
    type: "GET",
    url: "note.xml",
    dataType: "xml",
    success: parseResultsXML
});

function parseResultsXML(xml) {

    $(xml).append('<item>something</item>'); // Nothing gets added! :(
}

</script>

2 个答案:

答案 0 :(得分:3)

我认为你需要使用$ .parseXML(xml)来解析XML。 parseXML()是jQuery 1.5的新增功能。我遇到了类似的问题,最后我使用了一些插件库来解析XML,因为我使用的是jQuery 1.4。

http://api.jquery.com/jQuery.parseXML/

====编辑====

使用jQuery操作XML有点棘手。请尝试以下代码

var dom = $.parseXML(xml); //returns DOM element
var item = $.parseXML("<item>something</item>"); //returns DOM element

$(dom).children(0).append($(item).children(0))

console.log($(dom).find("item").text()); //should print "something"

你必须做$(dom).children(...)因为dom是一个文档对象,你必须将它包装到jQuery中才能使用jQuery函数。

您必须执行$(dom).children(0).append(...)而不是$(dom).append(),因为dom指的是XML DOM树的文档根目录。回想一下所有DOM看起来像:

  Document
     |
    root
  /  |  \   
 c1  c2  c3 ....more children...

因此,如果你执行$(dom).append(..),你实际上是在尝试附加到不允许的文档根目录,因为文档根目录只能有一个子元素,即xml文档的根元素。

同样,您执行.append($(item).children(0))因为要插入item的根元素而不是item的文档根

答案 1 :(得分:0)

由于跨域ajax 问题,永远不会调用函数parseResultsXML,http://www.w3schools.com/xml/note.xml与您的网页位于不同的域中。

而是将xml文件复制到您的站点,然后将代码更改为:

$.ajax({     
    type: "GET",     
    url: "/note.xml",     
    dataType: "xml",     
    success: parseResultsXML 
});