2011-08-04 87 views
11

所以我有一個包含文本塊的div,以前用戶在這個塊中選擇了一些文本,並且我從這個選擇中創建了一個範圍對象。我存儲了選定文本的起點和終點的偏移量,但是我有重新創建範圍的問題(所以我可以操縱它)。 「引用」是包含所有文本的div。我不知道我做錯了什麼。當我知道字符偏移量時,如何創建一個範圍對象?

 


    var theRange = rangy.createRange(); 
    var node = $('.quotables').html(); 
    theRange.setStart(node, 14); 
    theRange.setEnd(node, 318); 

 

,但我不斷收到錯誤:未捕獲 錯誤:NOT_FOUND_ERR:DOM異常8
m.setStart
(匿名函數)
d.extend._Deferred.f.resolveWith
ddextend.ready
dcaddEventListener.y

+1

您是否曾經找出解決此問題的好方法?我試圖遞歸迭代通過文本節點和數字字符,我覺得我幾乎在那裏... –

回答

15

範圍邊界不是HTML的字符串表示形式中的字符偏移量。相反,它是DOM節點內的偏移量。例如,如果該節點是文本節點,則該邊界將表示爲節點文本內的字符偏移量。如果節點是一個元素,它表示爲邊界之前的節點的子節點的數量。例如,在下面的HTML,射程其邊界由|都表示:

<div id="test">foo|bar<br>|<br></div> 

...範圍的開始邊界就在於在那是<div>元素的第一個子文本節點偏移量爲3,而末端邊界位於<div>內的偏移2處,因爲在邊界之前有兩個子節點(文本節點「foobar」和一個<br>元素)。您將以編程方式創建範圍如下:

var range = rangy.createRange(); // document.createRange() if not using Rangy 
var div = document.getElementById("test"); 
range.setStart(div.firstChild, 3); 
range.setEnd(div, 2); 
+0

有沒有一種方法來編程「找出」開始和結束節點和相對偏移量,你需要給予文本的字符串表示中的字符偏移量? –

+0

@MikeTurley:這個答案可能有所幫助:http://stackoverflow.com/a/5596688/96100 –

相關問題