2008-10-20 149 views
2

我試圖讓開始元素和選擇結束元素,在每個選擇的偏移,我這樣做在Firefox如下:問題與IE瀏覽器的選擇和範圍

var delselection = window.getSelection(); 

var startOffset = delselection.anchorOffset; 

var endOffset = delselection.focusOffset; 

var startNode = delselection.anchorNode.parentNode; 

var endNode = delselection.focusNode.parentNode; 

然而我不知道如何在IE6中做到這一點,任何人都能指出我在正確的方向?

回答

1

您應該查看IE BOM的ControlRangeTextRange對象。我相信IE6/7不支持AnchorOffset,focusOffset和window.getSelection()。

+0

anchorOffset等firefox方法來處理選擇只是把他們在那裏給出一個想法,我正在嘗試。 textRange對象只是給出了與文檔邊緣相關的偏移量,所以我假設它在pixles中,我不認爲你可以在選擇時使用controlRange對象 – user11198 2008-10-20 11:37:15

4

document.selection。

但是,IE返回的TextRange對象與Firefox/WebKit/W3不匹配,確定開始點和結束點的確切位置非常令人沮喪。取決於你對範圍做了什麼,你可能能夠使用range.parentElement(),range.inRange()或range.compareEndPoints()獲得某處。對於富文本編輯器,通常最終會使用令人難以置信的range.execCommand()接口。

IE範圍的實現與Mozilla/Webkit/W3模型非常奇怪和不同,您通常會得到完全不同的代碼路徑來處理兩者之間的選擇。

+0

在所有瀏覽器中處理選擇和範圍都是令人難以忍受的,而不是對於心靈的隱隱而言。這些都是好的提示,謝謝bobince! – Jason 2010-04-15 22:17:17

1

如果您知道對象的選擇中(例如,它是一個輸入框,你想,當他們輸入改變用戶鍵入),這個代碼做的伎倆:

var selObj = null; 
var selSave = null; 
var selSaveEnd = null; 

function SaveSelection(obj) { 
    if (obj.selectionStart) { 
     selObj = obj; 
     selSave = obj.selectionStart; 
     selSaveEnd = obj.selectionEnd; 
    } 
    else { 
     // Internet Explorer case 
     selSave = document.selection.createRange(); 
    } 
} 

function RestoreSelection() { 
    if (selObj) { 
     selObj.focus(); 
     selObj.selectionStart = selSave; 
     selObj.selectionEnd = selSaveEnd; 
    } 
    else { 
     // Internet Explorer case 
     selSave.select(); 
    } 
}