2010-07-22 85 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