2009-06-24 6 views
9

Je récupère du XML à partir d'un appel AJAX (pas de surprise) et je veux faire quelque chose mais seulement sur certains nœuds et quelque chose d'autre sur le reste. Par exempleComment puis-je utiliser JQuery pour obtenir tous les nœuds avec un attribut égal à une valeur?

<xml> 
    <node name="x"> 
    </node> 
    <node name="x"> 
    </node> 
    <node name="y"> 
    </node> 
    <node name="z"> 
    </node> 
</xml> 

Je souhaite que tous les noeuds avec le nom x soient placés dans une table et que tous les autres se déplacent vers une autre table.

Répondre

19

utiliser un filtre d'attribut, en particulier le attributeEquals filter:

$("node[name='x']"); 

Pour sélectionner tous les autres noeuds, utilisez le attributeNotEquals filter:

$("node[name!='x']"); 

Vous pouvez ensuite appliquer jQuery manipulations pour déplacer ces noeuds ailleurs.

Notez que les sélecteurs de type XPath sont obsolètes dans la version 1.2 et ont été complètement supprimés dans jQuery 1.3.

Si vous pouvez influencer ce que le serveur envoie, vous voudrez peut-être passer à l'utilisation de JSON à la place, vous pouvez trouver plus facile à analyser.

1

Vous pouvez utiliser XPath dans jQuery pour sélectionner les nœuds:

$ ("// nœud [@ name = 'x']")

http://docs.jquery.com/DOM/Traversing/Selectors

+0

+1 - Très élégante deuxième réponse :) – karim79

+0

Merci de travailler jusqu'à maintenant. Mais comment puis-je faire la partie non? – uriDium

+2

La syntaxe de xpath a été abandonnée dans jQuery 1.2 et ne fonctionne plus du tout dans 1.3, voir la section d'attribut sur cette page ici: http://docs.jquery.com/Selectors –

1

jQuery accepte Expressions xpath aussi.

$('node[name="x"]')

sélectionne tous les noeuds nommés « noeud » avec un attribut de « nom » qui a la valeur « x »

+0

Jusqu'ici tout va bien. Mon xpath est terrible. Comment puis-je le modifier pour sélectionner où tout n'est pas pour name = x. – uriDium

+0

$ ('node [nom] [not (name = "x"]') va trouver tous les nœuds avec des noms différents de 'x' –

7
success: function(xml) { 
    $(xml.find('node').each(function(){ 
    if($(this).attr('name')=='x') { 
     //go to one table 
    } else { 
     //go to another table 
    } 

    } 
} 
Questions connexes