【发布时间】:2013-10-14 15:00:47
【问题描述】:
我创建了一个带有文本部分和链接的 contentEditable div。双击链接将选择链接文本。
<div contentEditable="true">
This is a text and <a href="http://www.google.com">This_is_a_link</a>
</div>
之后调用 document.getSelection().getRangeAt(0).startContainer 会返回 div:
// => <div contenteditable="true">
而不是链接。我找不到找到 div 的哪一部分被选中的方法。
查看这个 jsfiddle(双击“This_is_a_link”,会有一个带有 startContainer 的控制台日志): http://jsfiddle.net/UExsS/1/
(来自小提琴的强制性 JS 代码)
$(function(){
$('a').dblclick(function(e) {
setTimeout(function() {
console.log(window.getSelection().getRangeAt(0));
}, 500);
});
});
请注意,Chrome 的行为是正确的,在 Chrome 中运行上述 jsfiddle 将为 startContainer 提供 textElement。
有人遇到过这个问题吗?你找到解决方法了吗?
【问题讨论】:
-
在 Firefox 中获取所选文本并非不可能。您从选择中获得的范围准确地告诉您它的边界在哪里。
-
我得到了 startOffset = 0,endOffset = 0。你试过了吗?我正在使用 Firefox 24
-
在 Firefox 24 的 jsFiddle 中,我得到
startOffset1 和endOffset2,其中startContainer和endContainer都指的是<div>。这是我所期望的。 -
我之前确实得到了 1 和 2。 1和2是什么意思?
-
对于每个边界(开始和结束),如果容器是元素而不是文本节点,则偏移量是容器内边界之前的子节点数。在您的示例中,Firefox 中选择范围的开始位于
<div>的一个子节点之后(即紧跟在" This is a text and "文本节点之后),而结束位于两个子节点之后(即紧随<a>元素之后)。
标签: javascript jquery firefox selection contenteditable