2011-06-09 108 views
1

這似乎是一件非常簡單的事情,但我還沒有想出如何去做。由於XML片段:基於子元素的值遍歷父元素

<programs> 
    <program> 
    <title>Program 1</title> 
    <time>2011-01-05 12:00:00</time> 
    <code>a</code> 
    </program> 
    <program> 
    <title>Program 2</title> 
    <time>2011-01-05 12:30:00</time> 
    <code>b</code> 
    </program> 
    <program> 
    <title>Program 1</title> 
    <time>2011-01-06 12:00:00</time> 
    <code>a</code> 
    </program> 
</programs> 

如何遍歷其中開始與 '2011-01-05' 和代碼等於一個?我知道如何爲一個元素執行此操作,而且我似乎編寫了代碼,可以執行/或但我無法使用邏輯的正確語法。

如果變量數據包含我的XML,然後我可以使用$(data).find("code:contentIs('a'),time:contains('2011-01-05')").parent()兩全計劃1計劃2但我只想要得到計劃1

(contentIs是我寫的,我知道這樣的作品不講究一個函數)

我試圖$(data).find("code:contentIs('a'):time:contains('2011-01-05')").parent(),但我得到語法錯誤,無法識別的表達式:時間

我覺得我一定會錯過一些基本的語法,但我無法弄清楚它是什麼。

回答

1

我想在這裏使用:has。它查找具有與選擇器匹配的後代元素的元素。

$(data).find('program:has(code:contentIs("a")):has(time:contains("2011-01-05"))'); 

使用has選擇兩次說:「保證元素都要求相匹配」。這與通過兩個類別進行選擇相同。 a.someClass.someOtherClass

+0

非常好,那正是我所需要的。再次感謝。 – Jay 2011-06-09 22:06:44