jQuery - 前一节点 - 没有公共父节点

时间:2010-07-22 15:14:17

标签: jquery jquery-selectors jquery-traversing

使用jQuery我想从给定节点找到一个前面的节点。前一节点和给定节点可能没有相同的父节点!请检查以下片段:

<div class="container">
<div id="sec1">
    <p>Some text</p>
    <p><b>Some</b> text<</p>
    <p>Some <b>more</b> text</p>
</div>
<div id="sec2">
    <p>just a text</p>
</div>
<div id="sec3">
    <p>another <span id="cursorPos1"></span>text</p>
    <p><b>yet</b> another<span id="cursorPos2"></span> text</p>
</div>

假设当前给定节点是$("span#cursorPos1"),并且我想要找到的是前面的粗体文本,那么结果应为“<b>more</b>”。这里,给定节点位于div#sec3,目标节点位于div#sec1

如果当前给定节点为$("span#cursorPos2"),则前面的粗体文本为“<b>yet</b>”。这里,给定节点和目标先前节点都在同一个div#sec3

基本上,不应该考虑层次结构。从给定节点,选择器应该只是找到前一个匹配。

请告诉我如何做到这一点。

感谢
SRIKANTH

1 个答案:

答案 0 :(得分:2)

不是一个非常好的解决方案,但我认为这样做了。想法是找到所有粗体标签和光标元素,在结果数组中查找光标的位置,然后在它之前返回元素。

只是将它们放在一起,可能有更好的方法。如果你使用它,一些错误检查可能也是顺序。

prevBold = function(myId) {

var boldAndMe = $('#' + myId + ', b').toArray();
    var me = $('#' + myId).get(0);
    var myPos = boldAndMe.indexOf( me );

    return myPos > 0 ? $( boldAndMe[myPos-1] ) : null;

}