Javascript 将document.getSelection()展开到整个段落

Javascript 将document.getSelection()展开到整个段落,javascript,contenteditable,Javascript,Contenteditable,对于IE,此js代码仅在选择的长度非零时有效: document.execCommand("FormatBlock",false,tag); 获取包含节点非常简单: var node = document.getSelection().anchorNode; 但我真的不明白如何设置选择以包含此节点的所有文本 对我来说,最大的困惑是范围、选择、两者之间的关系,以及在contenteditable div的上下文中如何将它们结合使用,而contenteditable div的规则似乎与输入控件不

对于IE,此js代码仅在选择的长度非零时有效:

document.execCommand("FormatBlock",false,tag);
获取包含节点非常简单:

var node = document.getSelection().anchorNode;
但我真的不明白如何设置选择以包含此节点的所有文本

对我来说,最大的困惑是范围、选择、两者之间的关系,以及在contenteditable div的上下文中如何将它们结合使用,而contenteditable div的规则似乎与输入控件不同。我试着搜索教程,但“选择”和“范围”是宽泛的术语,我还没有找到任何好的

我发现,但由于我对范围和选择的不理解,我不知道如何应用它。下面是该页面的代码片段和序言文本

当应用于TextRange对象时,select方法会导致 要高亮显示的当前对象。以下函数使用 findText方法将当前对象设置为TextRange中的文本 对象该函数假定一个包含文本字符串的元素 “此处文本”

由此我写了以下内容,但它会导致选择整个文档

var sel = document.getSelection();
var r = document.body.createTextRange();
r.findText(sel.anchorNode);
r.select();

这将把选择扩展到整个段落

sel.selectAllChildren(sel.anchorNode.parentNode);
由于您只需要为internet explorer执行此操作,因此这是您的全浏览器版本

if (document.getSelection) {
  var sel = document.getSelection();
  var node = typeof sel.anchorNode.data == "string" ? 
    sel.anchorNode.parentNode : 
    sel.anchorNode;
  sel.selectAllChildren(node);
}
if (document.getSelection) {
  var sel = document.getSelection();
  var node = typeof sel.anchorNode.data == "string" ? 
    sel.anchorNode.parentNode : 
    sel.anchorNode;
  sel.selectAllChildren(node);
}