javascript - 使用 javascript 获取所选内容的原始 HTML

标签 javascript html selection getselection

如何使用 Javascript 获取页面上所选内容的原始 HTML?为了简单起见,我坚持使用支持 window.getSelection 的浏览器.

这是一个例子;两者之间的内容 |代表我的选择。

<p>
    The <em>quick brown f|ox</em> jumps over the lazy <strong>d|og</strong>.
</p>

我可以使用以下 Javascript 捕获和警告规范化的 HTML。

var selectionRange = window.getSelection().getRangeAt(0);
    selectionContents = selectionRange.cloneContents(),
    fragmentContainer = document.createElement('div');
    fragmentContainer.appendChild(selectionContents);
alert(fragmentContainer.innerHTML);

在上面的示例中,警告内容将折叠尾随元素并返回字符串 <em>ox</em> jumps over the lazy <strong>d</strong> .

我如何返回字符串 ox</em> jumps over the lazy <strong>d

最佳答案

您必须高效地编写自己的 HTML 序列化程序。

selectionRange.startContainer/startOffset 开始,从那里向前走树,直到到达 endContainer/endOffset,从节点输出 HTML 标记,包括当您进入元素时的打开标签和属性,以及当您进入 parentNode 时关闭标签。

没什么好玩的,特别是如果你在某个时候必须支持非常不同的 IE<9 Range 模型......

(另请注意,您将无法获得完全原始的原始 HTML,因为该信息已不存在。浏览器仅存储当前的 DOM 树,这意味着详细信息如标记大小写、属性顺序、空格和省略的隐式标记在源代码和您得到的内容之间会有所不同。)

关于javascript - 使用 javascript 获取所选内容的原始 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6129006/

相关文章:

javascript - 需要帮助使用 javascript 正则表达式查找加号

javascript - 获取div的实际宽度

jquery多行选择

javascript - 从选择中排除元素

javascript - HTML - 更改选择中文本的样式

Explorer 上的 JavaScript 日期对象问题

javascript - jQuery contentEditable 不起作用 - Internet Explorer 8 - 编辑表项目

javascript - 如何json输出整个范围?

html - 使用变换 3d 和位置相对和绝对时居中背景图像

html - 完全响应式网站与媒体查询