Сортируйте узлы XML с помощью jQuery, а затем присоединяйте их - PullRequest
1 голос
/ 21 мая 2009

Вот основы схемы ... это нечто большее, но это дает хорошее представление о том, что мне нужно сделать:

<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 Ответ

3 голосов
/ 22 мая 2009

При добавлении в массив itemsSorted вы можете использовать ... parent (). Get (0); Чтобы добавить узел в массив вместо объекта jQuery.

Затем после последней итерации:

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

Кроме того, вы должны знать, что вы не определили переменную 'i' в своих циклах for. Что делает его глобальной переменной и может вызвать много странного поведения. Я предпочитаю использовать jQuery.each, потому что это также дает вам локальную область внутри цикла for:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...