Перебирать родительские элементы на основе значений дочерних элементов - PullRequest
1 голос
/ 10 июня 2011

Это кажется очень простой вещью, но я не понял, как это сделать.Данный 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' и код равно а ?Я знаю, как сделать это для одного элемента, и у меня, казалось бы, написан код, который будет выполнять либо / или, но я не могу найти правильный синтаксис для логики 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(), но получаю Синтаксисошибка, нераспознанное выражение: время

Мне кажется, что мне здесь не хватает базового синтаксиса, но я не могу понять, что это такое.

1 Ответ

1 голос
/ 10 июня 2011

Я бы использовал :has здесь.Он находит элементы, которые имеют элементы-потомки, которые соответствуют селектору.

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

Использование селектора has дважды говорит «убедитесь, что элемент соответствует обоим требованиям».Это то же самое, что выбор двумя классами, например, a.someClass.someOtherClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...