2009-06-24 6 views
9

Otrzymuję niektóre XML z połączenia AJAX (bez zaskoczenia) i chcę coś zrobić, ale tylko na niektórych węzłach i coś innego na resztę. Na przykład:Jak mogę użyć JQuery, aby uzyskać wszystkie węzły o atrybutach równych wartości?

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

Chcę, aby wszystkie węzły o nazwie x, aby przejść do jednego stołu i chcę, aby wszystkie inne, aby przejść do innego stołu.

Odpowiedz

19

Użyj filtru atrybutu, w szczególności attributeEquals filter:

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

Aby zaznaczyć wszystkie inne węzły, należy użyć attributeNotEquals filter:

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

Następnie można zastosować jQuery manipulations, aby przenieść te węzły w inne miejsce.

Należy zauważyć, że selektory stylu XPath są przestarzałe w wersji 1.2 i zostały całkowicie usunięte w jQuery 1.3.

Jeśli możesz wpłynąć na to, co wysyła serwer, możesz przełączyć się na używanie JSON zamiast tego, możesz łatwiej analizować.

1

Można użyć XPath w jQuery aby wybrać węzły:

$ ("// węzeł [@ name = 'x']")

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

+0

+1 - Bardzo elegancka druga odpowiedź :) – karim79

+0

Dziękujemy za dotychczasową pracę. Ale jak mam to zrobić, a nie część? – uriDium

+2

Składnia xpath została uznana za przestarzałą w jQuery 1.2 i już nie działa w wersji 1.3, zobacz sekcję dotyczącą atrybutu na tej stronie: http://docs.jquery.com/Selectors –

1

jQuery akceptuje Wyrażenia xpath również.

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

wybierze wszystkie węzły o nazwach „węzeł” z atrybutem „nazwa”, który ma wartość „x”

+0

Jak dotąd tak dobrze. Mój xpath jest okropny. Jak mogę to zmienić, aby wybrać, gdzie wszystko NIE jest dla name = x. – uriDium

+0

$ ('node [nazwa] [not (name = "x"]') znajdzie wszystkie węzły o nazwach równych 'x' –

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

    } 
} 
Powiązane problemy