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

时间:2014-10-28 00:55:34

标签: javascript contenteditable

使用IE,此js代码仅在选择具有非零长度时起作用:

document.execCommand("FormatBlock",false,tag);

获取包含节点非常简单:

var node = document.getSelection().anchorNode;

但我真的不明白如何将选择设置为包含此节点的所有文本。

对我来说,最大的混淆来源是范围,选择,两者之间的关系以及如何在一个可信的div 的上下文中使用它们,这似乎与输入控件有不同的规则。我试着寻找一个教程但是"选择" "范围"是广义的,我还没有找到任何好的东西。

我找到了this in msdn,但由于我对范围和选择的不理解,我无法看到如何应用它。这是该页面的代码段和前言文本。

  

当应用于TextRange对象时,select方法会导致   要突出显示的当前对象。以下功能使用   findText方法将当前对象设置为TextRange中的文本   宾语。该函数假定包含文本字符串的元素   "在这里发短信"。

function TextRangeSelect() {
  var r = document.body.createTextRange();
  r.findText("text here");
  r.select();
}

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

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

1 个答案:

答案 0 :(得分:1)

这会将选择范围扩展到整个段落。

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);
}