jQuery: выберите последнее совпадение перед указанным элементом - PullRequest
0 голосов
/ 05 марта 2012

Есть ли способ в jQuery, для данного элемента и селектора, выбрать последнее совпадение этого селектора перед этим элементом в порядке обхода дерева DOM?

Например, с учетом дерева DOM:

<html>
  <body>
    <div class="a" id="div0" />
    <div>
      <div class="a" id="div1"/>
    </div>
    <div class="b" id="div2"/>
    <div id="element"/>
    <div class="a" id="div3"/>
    <div class="b" id="div4"/>
  </body>
</html>

Используя селектор .a и элемент #element, вы получите #div1, а используя селектор .b и элемент #element, вы получите #div2.

Вариант использования - написание скрипта GreaseMonkey для работы в разных версиях Firefox с немного искаженным HTML. У меня есть элемент, который я могу найти последовательно во всех версиях, но другой элемент, который я хочу найти, это либо предыдущий родной элемент предка элемента, либо потомок предыдущего родственного элемента предка элемента (в зависимости от версии ).

Все, на что я действительно могу положиться, это то, что это последнее совпадение селектора, которое происходит перед тем элементом, который у меня есть при выполнении обхода по порядку дерева DOM.

Ответы [ 3 ]

3 голосов
/ 05 марта 2012

Это следует сделать, используя ваш первый пример:

var $collection = $(".a, #element");

var eleIndex = $collection.index($("#element"));

var prevEl = $collection.eq(eleIndex - 1);

alert(prevEl.attr("id"));

http://jsfiddle.net/WdsGa/

0 голосов
/ 05 марта 2012

Это должно сделать это

var last = $(".a, #element").eq($(".a, #element").length-1);
0 голосов
/ 05 марта 2012

Sortof.Это будет хорошо работать для элементов одного уровня:

$("div.a:first").nextUntil("#element").last();

однако ваш вложенный div.a не будет работать с этим фрагментом, я не уверен в эффективном способе решения этой проблемы.Он выбирает первый элемент, соответствующий div.a, затем всех братьев и сестер после него, пока не найдет элемент, соответствующий #element, и затем получает последний из этих выбранных элементов.Но, опять же, это работает только с братьями и сестрами.

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