我想删除一些节点或使用jQuery XML添加一些节点,我尝试它append,empty,remove但他们似乎没有工作,像(在$阿贾克斯):
success:function(xml){
$(xml).find("layout").append('<app id="' + $children.eq(i).attr("id") + '"></app>');
$(xml).find("layout").empty();
}
Run Code Online (Sandbox Code Playgroud)
我也发现谷歌没有教程.所以我想知道是否可以使用jquery在xml中添加或删除节点?
好的,我详细写了,xml文件只保存在本地域中,因为这里的Database/UserConfig/config.xml是我的Ajax代码:
function layout_change()
{
var $children=$input.children();
$.ajax({
type: "get",
url: "Database/UserConfig/config.xml",
dataType: "xml",
timeout: 2000,
beforesend:function(xml){
$(xml).find("layout").empty();
},
success:function(xml){
for(var i=0;i<$children.length;i++)
{
$(xml).find("layout").append('<app id="' + $children.eq(i).attr("id") + '"></app>');
}
},
error:function(){}
});
}
Run Code Online (Sandbox Code Playgroud)
或者它可以用javascript完成?或者只能用C#这样的服务器语言来完成?......
这是我的demo xml:
<layout>
<app id="id-4"></app>
<app id="id-5"></app>
<app id="id-6"></app>
<app id="id-1"></app>
<app id="id-2"></app>
<app id="id-3"></app>
</layout>
Run Code Online (Sandbox Code Playgroud)
jQuery是一个用于在javascript中解析和操作XML的奇妙工具.事实上,jQuery的ajax API是基于这个构建的,这就是为什么你能够通过设置dataType参数来指定ajax调用的响应类型xml(尽管如果省略这个参数它们会尝试做一些自动检测) ).从参数的jQuery $.ajax()文档dataType:
"xml":返回可以通过jQuery处理的XML文档.
您可以使用jQuery尽可能多地解析和操作XML.我必须补充说,与服务器端XML库中的XPath查询相比,使用CSS选择器是很好的.
虽然empty并且remove按预期工作,但是在使用appendjQuery 等函数添加节点时会出现问题,无论出于何种原因(我还没有真正挖掘过这个),在附加到XML结构时不会为您创建元素(虽然这在HTML结构中工作正常).您可以通过将节点自己显式创建为DOM元素或jQuery对象,然后调用append以下内容来轻松解决此问题:
//Either of these will work
var elem = document.createElement('app');
xml.find('layout').append(elem); // Appends <app></app> to <layout>
xml.find('layout').append($('<app>')); // Does the same
// You can also you use other manipulation functions such as `attr`
xml.find('layout').append($('<app>').attr('id', 'ego'));
Run Code Online (Sandbox Code Playgroud)
但是,您的代码看起来还有其他问题会阻止它按预期运行.该$.ajax beforeSend回调,例如,通过在XMLHttpRequest物体的回调函数,而不是你的XML对象进行操作.结果是你empty在该回调中的调用什么都不做.
另外,如果你想操作的响应Database/UserConfig/config.xml中的beforeSend回调,它可能不会尚未存在,因为beforeSendAjax请求触发关闭之前被调用.xml您打算传入的参数可能是全局范围的,但是它在回调范围内被压扁,因为jQuery XMLHttpRequest正如我之前提到的那样传入.