2009-05-21 8 views
1

Voici les bases du schéma ... il y a plus que cela, mais cela donne une bonne idée de ce que je dois accomplir:Trier noeuds XML avec jQuery puis les rejoindre

<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> 

Voici une approche down-and-dirty:

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(); 

} 

Le problème est que itemsSorted est maintenant un tableau d'objets jQuery. Je dois obtenir tous mes articles noeuds retour ensemble, mais triés, de sorte que plus tard, je peux le faire.

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

Répondre

3

Lorsque vous ajoutez au tableau itemsSorted, vous pouvez utiliser ... parent() get (0) ; Pour ajouter le noeud au tableau au lieu de l'objet jQuery.

Puis, après la dernière itération:

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

En outre, vous devez savoir que vous n'avez pas défini la variable « i » dans vos boucles for. Ce qui en fait une variable globale, et peut causer beaucoup de comportement étrange. Je préfère utiliser le jQuery.each, parce que cela vous donne également une portée locale à l'intérieur de la boucle for :)

+0

Awesome. La clé était que j'essayais soit de créer un nouvel élément à la volée et d'y ajouter des objets jQuery, soit d'utiliser un tableau et de comprendre comment joindre les éléments ensemble. Ce que je devais faire était de modifier le document d'objet XML original. Merci! –

Questions connexes