Jquery 如何使用idref解析xml元素
给定一些示例Jquery 如何使用idref解析xml元素,jquery,xml,resolve,idref,Jquery,Xml,Resolve,Idref,给定一些示例data.xml文件: <?xml version="1.0" encoding="utf-8"?> <data> <categories> <category id="google"> <name>Google</name> </category> <categories> <display>
data.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<data>
<categories>
<category id="google">
<name>Google</name>
</category>
<categories>
<display>
<categories>
<category idref="google"/>
</categories>
</display>
</data>
$.ajax( {
url: '/data.xml',
dataType: 'xml',
success: function( data )
{
$data = $( data );
// fetch categories to display
$categories = $data.find( 'display > categories > category' );
}
} );
解决$categories
中获取的元素通过其idref
属性所引用的类别
元素的有效且紧凑的方法是什么
我想出了如下的办法:
$categories.each( function() {
var $category = $data.find( 'categories > category[id=' + $( this ).attr( 'idref' ) + ']' );
} );
但我认为可能有一种更紧凑的方法来收集元素。var$data=$(data);
var $data = $( data );
var $byId = {};
$("*[id]", $data).each(function () {
var $this = $(this);
$byId[ $this.attr("id") ] = $this;
});
// later...
$byId["google"].find("name"); // <name>Google</name>
var$byId={};
$(“*[id],$数据)。每个(函数(){
var$this=$(this);
$byId[$this.attr(“id”)]=$this;
});
//后来。。。
$byId[“谷歌”]。查找(“名称”);//谷歌
您可以从idref
属性创建:
var referenced = $.unique($categories.map(function() {
var $found = $data.find("#" + $(this).attr("idref"));
return ($found.length ? $found[0] : null);
}).get());
上面的代码使用and来构建一个数组,其中包含所有引用的
元素的唯一实例。啊,很好,我喜欢你在这里所做的;一次性解析所有idref
s。我还没有想到要走这条路。@Tomalak,我很确定它能处理所有格式良好的XML文档,是的。我创建了一个简单的测试提琴,id选择器为我工作。这也很好。当然,您也可以简单地创建id选择器。为什么我没有想到这一点?;-)@fireeyedboy这比我的好,如果它更快,还需要测试。从长远来看,可能不会,但根据文件大小的不同,差异可能是微不足道的。@Tomalak:无论如何,在这种情况下,速度对我来说并不是一个真正的问题。但是是的,这有点干净。虽然我喜欢你的一般方法。我现在想做的(只是我刚刚想到的)是将您的两个想法合并到一个扩展jQuery的方法中,这样我就可以执行类似于$categories.resolvedrefs()
的操作。因此,我认为我不能使用map()
和unique()
。如果我不设法让它起作用,也许我会就此开始一个新问题。到目前为止,谢谢你们两位!