通过Javascript计算HTML中的开始和结束选择索引
如何在除IE以外的浏览器中获取contentEditable“div”中的开始和结束选择索引。例如,IE有以下方法通过Javascript计算HTML中的开始和结束选择索引,javascript,jquery,html,Javascript,Jquery,Html,如何在除IE以外的浏览器中获取contentEditable“div”中的开始和结束选择索引。例如,IE有以下方法 var oSelection; var oTxtRange; var units = -100000; var iStartIndex = -1, iEndIndex = -1; if(document.selection) // IE.. { oSelection = document.selection; oTxtRange = oSelection.cre
var oSelection;
var oTxtRange;
var units = -100000;
var iStartIndex = -1, iEndIndex = -1;
if(document.selection) // IE..
{
oSelection = document.selection;
oTxtRange = oSelection.createRange();
if(oTxtRange)
{
iStartIndex = oTxtRange.moveStart('character',units);
iEndIndex = oTxtRange.moveEnd('character',units);
iStartIndex *= -1;
iEndIndex *= -1;
}
}
我知道上述方法不是W3C标准。我已经阅读了W3C文档中的Selection和Range对象,但仍然无法帮助找到Chrome和FireFox的解决方案。JQuery中的解决方案也是受欢迎的
提前感谢:-您可以在非IE浏览器中执行以下操作。它像IE版本一样返回页面可见正文文本中选择边界的偏移量,但我不确定这些数字的用途
function getBodyTextOffset(node, offset) {
var sel = window.getSelection();
var range = document.createRange();
range.selectNodeContents(document.body);
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
};
}
看看这里,也许会有帮助:你为什么需要这个?你从中得到的数字有什么用?法布里克:这与所问的问题无关。嗨,蒂姆,你的解决方案有效。伟大的关于我使用它的场景是这样的。假设,您将内容设置为可编辑,并且希望允许用户在特定位置键入,比如在Hello元素之间。此时,请确保键入时所选内容位于该元素内。非常感谢-