2009-09-09 96 views
1

我一直在使用jQuery .find()做xml遍歷,而且我發現偶爾我會在一棵樹中有一個子標記,它會在樹的某個地方與標記進行碰撞。例如...子XML標記衝突jQuery

<?xml version="1.0" encoding='UTF-8'?> 
<userInfo> 
    <firstname>This is a firstname</firstname> 
    <lastname>This is a last name</lastname> 
    <appSpecific> 
     <location></location> 
     <nickname>First L</nickname> 
     <status></status> 
     <color>FFB141</color> 
     <lastName>Oops, second name</lastName> 
     <firstName>Oops, second name</firstName> 
     <gender></gender> 
     <timezone></timezone> 
     <active>true</active> 
     <languages></languages> 
     <homepage></homepage>  
    </appSpecific> 
</userInfo> 

現在,當我這樣做:

var firstname = $(xml).find("firstname").text();  
var lastname = $(xml).find("lastname").text(); 

輸出是這兩組代碼的內容。

是否有一種很好的方法來過濾掉子標籤(特別是因爲我知道我想要過濾的父標籤)?

我正在嘗試一些.filter和.children的組合,但似乎無法讓它工作。任何幫助非常感謝。

感謝, 喬希

回答

1

有沒有過濾掉子標籤(尤其是因爲我知道父標籤我想一個好辦法過濾)?

使用CSS子選擇器來說你只想要直接的子元素而不是所有的後代。

我不確定你的例子中'xml'是什麼。如果它是你從例如XMLDocument得到的。 Ajax響應,你會說:

var firstname = $(xml).find('userInfo>firstname').text(); 

在另一方面,如果它是這樣一個文件中的XML元素節點的用戶信息,你會說:

var firstname = $(xml).find('>firstname').text(); 

如果它的實際上面的文件的字符串文本,第二個案例似乎工作,但它真的做錯了。使用$(markup)會爲您提供HTML片段,而不是XML。您的XML不是有效的HTML,並且只能巧合使用。

在jQuery中沒有內置的方法來創建/解析XML文檔。見例如。 http://plugins.jquery.com/project/createXMLDocument爲你如何去做,雖然瀏覽器的支持並不完美。

+0

有沒有更合適的方法來做到這一點? – Josh 2009-09-09 23:57:50

+0

我有ajax響應的xml。沒有發現需要使用第三方插件,除了這個特殊的兒童衝突案例。儘管如此,感謝您的鏈接。 – Josh 2009-09-10 00:02:04

+0

啊,好的。爲答案增加了更多的上下文,歡呼 – bobince 2009-09-10 00:03:53

1

你可以嘗試使用:first選擇:

var firstname = $(xml).find("firstname:first").text();  
var lastname = $(xml).find("lastname:first").text(); 
+0

這適用於我的情況在這裏,謝謝! – Josh 2009-09-10 00:02:42