这似乎是一件非常简单的事情,但我还没弄明白该怎么做。给定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”开头,而代码等于 a ?我知道如何为一个元素执行此操作,并且我看似编写的代码将执行任何一个/或但是我无法使用 AND 逻辑的正确语法。
如果变量 data 包含我的XML,那么我可以使用$(data).find("code:contentIs('a'),time:contains('2011-01-05')").parent()
同时获取 Program 1 和 Program 2 但是我只想获得 Program 1 。
(contentIs是我写的一个我知道有效的功能所以不要注意那个)
我尝试$(data).find("code:contentIs('a'):time:contains('2011-01-05')").parent()
但是我得到语法错误,无法识别的表达式:时间
我觉得我必须在这里遗漏一些基本语法,但我无法弄清楚它是什么。
答案 0 :(得分:1)
我在这里使用:has
。它找到具有与选择器匹配的后代元素的元素。
$(data).find('program:has(code:contentIs("a")):has(time:contains("2011-01-05"))');
使用has
选择器两次说“确保元素符合两个要求”。这与通过两个类选择相同,例如a.someClass.someOtherClass
。