javascript - jQuery:选择指定元素之前的最后一个匹配项

标签 javascript jquery dom

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 树时出现在元素之前的选择器的最后一个匹配项。

最佳答案

使用您的第一个示例应该可以做到这一点:

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

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

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

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

http://jsfiddle.net/WdsGa/

关于javascript - jQuery:选择指定元素之前的最后一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9572012/

相关文章:

javascript - Node WriteFile 不使用下划线编写我需要的对象。写入整个对象

jquery - 菜单和子菜单悬停之间的间隙

javascript - Meteor 中的 jQuery 无法找到 DOM 选择器

javascript - 我正在学习编码,有人可以告诉我哪里出了问题吗?

javascript - AngularJS 和 Packery

jquery - 为网速较慢的第三世界国家设计页面的技巧

jquery - 如何用jquery动画显示隐藏的div?

dom - 为什么 document.evaluate ('.' , document.body, null, XPathResult.ANY_TYPE, null).singleNodeValue 抛出异常?

html - React - 转换 HTML 脚本标签以异步加载 SDK

javascript - THREE.PointerLockControls 不锁定我的指针