2010-07-22 25 views
2

使用jQuery我想定位给定节点的前一个节点。前面的节点和给定的节点可能没有相同的父节点!请检查下面的代码片段: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

回答

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; 

} 
+0

非常感谢。它工作正常,现在我会解决这个解决方案。 – 2010-07-23 12:40:26