2015-11-03 2 views
1

Element.select() возвращает согласованные элементы, которые могут включать этот элемент или любой из его дочерних элементов. Есть ли способ, которым я могу запросить только этот элемент, но не включая его детей?Как я могу запросить (выбрать) элемент, не включая его детей?

Например, я хочу знать, соответствует ли элемент условию запроса, например. «Р Ли». Я знаю, что могу использовать методы Element.getElementsByxxx(), но поскольку запрос может быть тегом или атрибутом или некоторыми другими условиями, Element.getElementsByxxx() не будет работать. Было бы неплохо Element.select() может ограничить запрос только для данного элемента. Является ли это возможным? Благодарю.

ответ

1

Вы можете добавить отрицание только к корневому элементу: :not(*>*) Это означает, что данный элемент не должен иметь прямого родителя. Для примера рассмотрим это содержание HTML:

<div class="test"><p class="test2">xxx</p><p>yyy</p></div> 

Если e является внешний div элемент:

!e.select("div:not(*>*)").isEmpty() -> true 
!e.select(".test:not(*>*)").isEmpty() -> true 
!e.select(".test2:not(*>*)").isEmpty() -> false 
!e.select("li:not(*>*)").isEmpty()  -> false 
!e.select("p:not(*>*)").isEmpty()  -> false 

Но, к сожалению, псевдо-селектор :not имеет только изменить последний селектор:

!e.select("p,li:not(*>*)").isEmpty() -> true 

Итак, если вам нужно совместить несколько селекторов одновременно, вам, наверное, нужна какая-то логика.

Надеюсь, это то, о чем вы просили.

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