2011-06-09 103 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