【问题标题】:Is there a way to get the offset of the selected text within an input box in IE?有没有办法在 IE 的输入框中获取所选文本的偏移量?
【发布时间】:2009-02-24 22:08:20
【问题描述】:
在 Firefox 中,您可以简单地调用:
myInputTextField.selectionStart 或 myInputTextField.selectionEnd
获取输入框中所选文本的第一个和最后一个索引。
在 IE 中,我知道您可以调用 document.selection.createRange() 来稍微调整一下选择。然而,在我的一生中,我还没有找到任何代表所选内容中该字符偏移的值。
我错过了什么吗?有什么方法可以在 IE 中获得相同的值?
谢谢!
亚历克斯
【问题讨论】:
标签:
javascript
html
internet-explorer
web-applications
【解决方案1】:
从previous response 到a very similar question 的直接引用将为您提供选择范围:
function getSelection(inputBox) {
if ("selectionStart" in inputBox) {
return {
start: inputBox.selectionStart,
end: inputBox.selectionEnd
}
}
//and now, the blinkered IE way
var bookmark = document.selection.createRange().getBookmark()
var selection = inputBox.createTextRange()
selection.moveToBookmark(bookmark)
var before = inputBox.createTextRange()
before.collapse(true)
before.setEndPoint("EndToStart", selection)
var beforeLength = before.text.length
var selLength = selection.text.length
return {
start: beforeLength,
end: beforeLength + selLength
}
}
【解决方案2】:
getSelectionOffset : function(argObject) {
if (typeof(argObject.contentWindow.getSelection) != 'undefined') { //Moz
return {
start: argObject.contentWindow.getSelection().getRangeAt(0).selectionStart,
end: argObject.contentWindow.getSelection().getRangeAt(0).selectionEnd
}
}
if (document.selection && document.selection.createRange) { //IE
var allText = argObject.contentWindow.document.selection.createRange().parentElement().innerText;
var selText = argObject.contentWindow.document.selection.createRange().text;
return {
start: allText.indexOf(selText),
end: allText.indexOf(selText) + selText.length
}
}
}