2012-01-22 34 views
5

我正在尋找一種方法來計算從已知父元素中選擇用戶的開始和結束位置。我遇到了this稍作修改我能夠爲FF工作,但我不知道如何在IE中做到這一點,如果我的修改是合適的,我很想得到一些想法。非常感謝Tim Down的原始答覆。使用來自父元素的javascript來計算用戶選擇的開始和結束位置

function getBodyTextOffset(node, offset) { 
    var sel = window.getSelection(); 
    var range = document.createRange(); 
    range.selectNodeContents(document.getElementById('test')); 
    range.setEnd(node, offset); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
    return sel.toString().length; 
} 

function getSelectionOffsets() { 
    var sel, range; 
    var start = 0, end = 0; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      range = sel.getRangeAt(sel.rangeCount - 1); 
      start = getBodyTextOffset(range.startContainer, range.startOffset); 
      end = getBodyTextOffset(range.endContainer, range.endOffset); 
      sel.removeAllRanges(); 
      sel.addRange(range); 
      alert(start + ", " + end); 
     } 
    } else if (document.selection) { 
     // IE stuff here 
    } 
    return { 
     start: start, 
     end: end 
    }; 
} 

我知道這已經有一段時間了,但這裏是一個JSFiddle顯示的想法。它再次適用於FF和Chrome,但不適用於IE9。理想情況下,我希望能夠從元素測試的開始獲得偏移量。

+1

減少[jsfiddle](http://jsfiddle.net/)演示將大大提高您獲得良好答案的機會。 – c69

+0

看看[Rangy](http://code.google.com/p/rangy/)。您可能能夠非常密切地翻譯您當前的代碼。 – Hemlock

回答

1

JavaScript的範圍是一個痛苦的話題,雖然這裏有一些很好的資源...

這裏有一些演示,你可以作爲參考使用...

http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html

一個模糊的,雖然體面的起點指出要了解什麼方法和屬性可用... http://help.dottoro.com/ljxsqnoi.php

你可以發現什麼包含使用以下JavaScript ...

for (i in window.getSelection()) {alert('i = '+i);} 

當你看到提及您可以附加一個對象,只要確保你知道還用括號的方法和在極特殊的參數,如下面的一個...

for (i in window.getSelection().getRangeAt(0)) {alert('i = '+i);} 

而且在Gecko瀏覽器中有一個非常討厭的範圍錯誤(例如Firefox)如果你將鼠標略微移動到一個元素的外面,儘管Gecko錯誤地將邊界元素設置爲該元素的一個字母/字符的50%,儘管它沒有被選擇。這是非常討厭的只是試圖找出它是什麼,Mozilla實際上拒絕修復它(因爲他們有許多其他錯誤,他們明顯在錯誤的地方),這裏是我發佈的錯誤帖子的鏈接...

https://bugzilla.mozilla.org/show_bug.cgi?id=696571

希望這會讓你朝着正確的方向前進。

相關問題