如何使用javascript获取&使用字符偏移量设置插入符号位置
How do I use javascript to get & set caret position using character offset?
有没有一种方法可以使用javascript来获取&使用字符偏移量(相对于文档开头)设置插入符号位置?
在我的情况下,由于多种原因,首选使用的值是字符偏移量,而不是dom节点。有没有一种相当快速(没有明显的时间)的方法来实现这一点?我更愿意将任何"p"标记视为字符("''n"),但如果这使得解决方案不可能实现,则可以忽略它们
编辑:由于这显然令人困惑,我之所以询问插入符号,是因为有插入符号。不是因为没有。[那些不了解contentEditable的人无论如何都没有机会回答这个问题,所以我认为没有必要解释]。既然我被要求证明我已经尝试过了,但不知道我要问的问题的解决方案(我想知道,否则我为什么要问?),这是我能做的最好的尝试。它没有给出正确的答案。
编辑:它现在给出了正确的答案;唯一的问题是是否有javascript方法或更简单、更快的方法。
编辑:修正了在换行后选择结束时给出正确答案的问题。
function nodeOffset(findnode) {
var offset = 0;
var root = document.body
var node = root.childNodes[0];
while(node != null) {
if(node.nodeType == 3) {
if(node == findnode)
return offset;
offset += node.length; //text
} else if (node.tagName == 'P') {
offset += 1; //newline character
if(node == findnode)
return offset;
}
if(node.hasChildNodes()) {
node = node.firstChild;
} else {
while(node.nextSibling == null && node != root) {
node = node.parentNode;
}
node = node.nextSibling;
}
}
}
var selection = window.getSelection();
var offset = nodeOffset(selection.focusNode) + selection.focusOffset;
一种暴力方法。(它很有可能跳闸,例如,如果其他标签是display:block
,或者如果p
不是display:block
,或者其他可能的问题):
要获得选择插入符号/锚点偏移量,它可能是一个相同的:
function nodeOffset(findnode) {
var offset = 0;
var root = document.body
var node = root.childNodes[0];
while(node != null) {
if(node.nodeType == 3) {
if(node == findnode)
return offset;
offset += node.length; //text
} else if (node.tagName == 'P') {
offset += 1; //newline character
if(node == findnode)
return offset;
}
if(node.hasChildNodes()) {
node = node.firstChild;
} else {
while(node.nextSibling == null && node != root) {
node = node.parentNode;
}
node = node.nextSibling;
}
}
}
var selection = window.getSelection();
var focusoffset = nodeOffset(selection.focusNode)+selection.focusOffset;
var anchoroffset = nodeOffset(selection.anchorNode)+selection.anchorOffset;
要设置插入符号/锚点偏移量,尽管它们必须按最小->最大的顺序排列,但不能选择要聚焦的内容;要锚定的:
function offsetNode(findoffset) {
var offset = 0;
var root = document.body
var node = root.childNodes[0];
while(node != null) {
if(node.nodeType == 3) {
offset += node.length; //text
if(offset >= findoffset)
return [node, findoffset-offset+node.length];
} else if (node.tagName == 'P') {
offset += 1; //newline character
}
if(node.hasChildNodes()) {
node = node.firstChild;
} else {
while(node.nextSibling == null && node != root) {
node = node.parentNode;
}
node = node.nextSibling;
}
}
}
var selection = window.getSelection();
var range = document.createRange();
var start = offsetNode(startoffset)
var end = offsetNode(endoffset)
range.setStart(start[0], start[1]);
range.setEnd(end[0], end[1]);
selection.removeAllRanges();
selection.addRange(range);
相关文章:
- 添加新数据时D3.JS条形图列偏移量
- 当偏移量改变时滚动顶部
- 引导数据偏移量底部
- 可以在调整窗口大小时重新调整stellar.js的元素偏移量
- 可滚动元素,如何在调整大小时更改顶部偏移量
- 使用JavaScript日期的任何时间的时区偏移量
- 时刻时区:UTC 偏移量差异
- jQuery偏移量顶部没有'工作不正常
- 如何获取当前时区偏移量(并正确格式化)
- d3.mouse 偏移量返回的值不正确
- jQuery根据鼠标位置计算DIV偏移量和边界
- 更改 for 循环中 SVG 行的笔触虚线偏移量
- 如何使用javascript获取&使用字符偏移量设置插入符号位置
- 如何在 iframe 中获取字符偏移量
- 如何获取dom元素相对于其父元素的字符偏移量
- javascript内容可编辑:将光标设置为字符偏移量
- 如何使用Range Object和window.getSelection()获得与body相关的字符偏移量
- 决定什么和如何使用字符偏移量
- 当我只知道字符偏移量时,如何创建范围对象?
- Internet Explorer TextRange中的字符偏移量