繁体   English   中英

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

[英]Expand document.getSelection() to entire paragraph

使用IE,此js代码仅在选择的长度为非零时才有效:

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

获取包含节点很简单:

var node = document.getSelection().anchorNode;

但我不太了解如何设置选择内容以包含该节点的所有文本。

对我而言,最大的困惑来源是范围,选择,两者之间的关系以及如何在一个内容可编辑的div(它似乎与输入控件有不同的规则) 的上下文中一起使用它们。 我尝试搜索教程,但“选择”和“范围”是广义术语,我还没有发现任何好的方法。

在msdn中找到了这个,但是由于对范围和选择的不了解,我看不到如何应用它。 这是该页面上的代码段和预告文字。

当应用于TextRange对象时,select方法使当前对象突出显示。 以下函数使用findText方法将当前对象设置为TextRange对象中的文本。 该函数假定一个元素包含文本字符串“ text here”。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM