检测JavaScript范围对象中的换行符的问题

Tim*_*mbo 15 javascript newline range contenteditable

我有一些javascript根据用户选择的内容操纵html.对于真正的浏览器,我正在使用的方法利用"Range"对象,如下所示:

    var sel = window.getSelection();
    var range = sel.getRangeAt(0);
    var content = range.toString();
Run Code Online (Sandbox Code Playgroud)

内容变量包含所有选定的文本,工作正常.但是我发现我无法在结果字符串中检测到换行符.例如:

选定的文字是:

ABC

高清

GHI

range.toString()计算为"abcdefghi".

对特殊字符的任何搜索都不会返回\n\f\r或甚至\ s的实例.但是,如果我将变量写入可编辑控件,则会再次显示换行符.

有谁知道我错过了什么?

这些选择和操作可能与可编辑的div相关.在Chrome,FireFox和Opera中也可以看到相同的行为.令人惊讶的是IE无论如何都需要完全不同的代码,但除了它只是IE之外,没有任何问题.

非常感谢.

Nar*_*man 14

编辑我的帖子:

尝试一下,我发现sel.toString()在可信任的div 中返回新行,而range.toString()在正常的不可编辑的div中正确地返回换行符,但不是在可编辑的div中,正如您所报告的那样.

但是找不到行为的任何解释.

这是一个有用的链接http://www.quirksmode.org/dom/range_intro.html

  • 解释很简单,在 DOM Range 规范中进行了阐述:“Range.toString()”仅包含来自文本节点的内容。因此,不包括块元素隐含的“<br>”元素和换行符。 (2认同)
  • `document.getSelection().toString()` 在 IE 11 中不起作用。它将所有新行文本合并为一个。 (2认同)