2012-05-28 5 views
0

В настоящее время я пишу механизм выбора CSS для серверной JS (have a look!). Чтобы получить прочную основу, я начал использовать тесты Qwery (существующий механизм выбора). Там я нашел a number of tests для «отношений-первых запросов». По-видимому, CSSselect (мой проект) не показывает ожидаемое поведение, но я не уверен, чего ожидать.Взаимосвязанные запросы

Я уже искал документацию, но не нашел ничего полезного. Моя текущая реализация интерпретирует их следующим образом:

  • > эквивалентно :not(:root)
  • ~ и + эквивалентны :not(:first-child)
  • пробелов в начале игнорируется

Qwerys интерпретация кажется, отличается, но есть ли что-нибудь официальное?

+0

Что вы подразумеваете под '' ', эквивалентно': not (: root) '? Один из них - комбинатор, другой - псевдокласс. – BoltClock

+0

'> tag' эквивалентен' тегу: not (: root) ' – fb55

+0

Кроме того, ваш движок включает в себя ряд расширений jQuery; ': has()' и ': selected' также являются расширениями jQuery, а не частью CSS. – BoltClock

ответ

2

Нет. Вы можете взглянуть на http://www.w3.org/TR/CSS21/selector.html и http://www.w3.org/TR/css3-selectors/ (CSS3).

  • >:not(:root). :root означает корень документа, поэтому ваш «равный» будет истинным для каждого, кроме одного элемента. Вместо этого это [direct] child combinator.
  • ~:not(:first-child)+. В основном потому, что ~ и + отличаются друг от друга, а эквивалентность транзитивна. Оба являются компиляторами братьев и сестер, один general, а другой для adjacent единиц.
  • Пробел должен быть проигнорирован, я думаю. Что еще это будет представлять? descendant combinator нуждается в двух простых селекторах вокруг него. Вас также может заинтересовать The grammar of Selectors.

Конечно, детский комбинатор подразумевает, что ребенок не является корнем документа, а соседний комбинатор подразумевает, что родственный брат не является первым ребенком.

+1

«Комбинатор потомков нуждается в двух простых селекторах вокруг». Вернее, два составных селектора. Но это определение будущего ... – BoltClock

+0

Грамматика - это то, что я искал. Благодаря! – fb55

+0

@BoltClock: О, правильно. Чтобы правильно указать текущий [раздел 8.1] (http://www.w3.org/TR/selectors/#descendant-combinators): «... * - это пробел, который разделяет две последовательности простых селекторов.* « – Bergi

1

Эти селектора «отношения сначала» являются нестандартными расширениями, поэтому нет ничего «официального», определяющего их. Из вашего описания > foo, + foo и ~ foo, похоже, эквивалентны * > foo, * + foo и * ~ foo, соответственно.

+1

Недавно я обнаружил, что [Selectors API level 2 spec] (http://www.w3.org/TR/selectors-api2/#relative-selector), похоже, использует эти расширения, называя их« относительными селекторами », , для использования с 'find()' и 'findAll()' .Это получится довольно интересным. – BoltClock

+0

@BoltClock, по-видимому, они имеют в виду то же самое, что если ': scope' был добавлен и принят только в некоторых контекстах (когда есть область действия.) –

Смежные вопросы