使用jQuery对XML节点进行排序,然后加入它们

时间:2009-05-21 17:51:03

标签: javascript jquery sorting

以下是架构的基础知识......除此之外,还提供了我需要完成的内容:

<item>
    <name>This is some product name to sort with dictionary sort.</name>
    <price value="29.99">$29.99</price>
</item>
<item>
    <name>This is some product name to sort with dictionary sort.</name>
    <price value="29.99">$29.99</price>
</item>

这是一种肮脏的方法:

var node = null;
var path = null;
var items = jQuery( "item", xml );
var itemsTmp = new Array();
var itemsSorted = [];

for ( i = 0; i < items.length; i++ ) {

    // price
    itemsTmp[i] = jQuery( "price", items[i] ).attr( "value" );

}

itemsTmp.sort(function(a,b){return a-b});

for ( i=0;i<itemsTmp.length;i++ ) {

    itemsSorted[ i ] = jQuery( "price[value=" + itemsTmp[ i ] + "]", items ).parent();

}

问题是itemsSorted现在是一个jQuery对象数组。我需要将所有项目节点重新组合在一起,但需要排序,以便稍后我可以这样做:

jQuery( "item", xml ).each(function() {
    alert( jQuery( "price", this ).text() );
});

1 个答案:

答案 0 :(得分:3)

添加到itemsSorted数组时,可以使用... parent()。get(0);将节点添加到数组而不是jQuery对象。

然后在最后一次迭代之后:

jQuery("item", xml).remove();
jQuery.each(itemsSorted, function() {
    jQuery(xml).append(this);
});

另外,您应该知道您还没有在for循环中定义变量'i'。这使它成为一个全局变量,并可能导致许多奇怪的行为。我更喜欢使用jQuery.each,因为它还为for-loop提供了本地范围:)