javascript - 如何使用 html 标记包装来自 window.getSelection().getRangeAt(0) 的文本选择?

标签 javascript jquery dom

如何从 window.getSelection().getRangeAt(0) 中进行选择并用 HTML 标记(如“span”或“mark”)包围它?我更喜欢直接的 javascript 或 jQuery 解决方案。

我能够使用警报输出选定的文本,但还没有弄清楚如何用额外的标记包围它。我已经看到很多在选择上运行 execCommand 的例子,但这不是我要找的。

jsfiddle 查看我的工作示例

有什么想法吗?谢谢

最佳答案

如果所选文本全部包含在单个文本节点中,您可以使用 surroundContents() 范围的方法。但是,这在一般情况下不起作用。要做的是将范围内的每个文本节点包围在 <span> 中。 .我的Rangy图书馆有a module that does this并跨浏览器工作(IE <= 8 本身不支持 DOM 范围)。

使用 Rangy 的示例代码:

<style type="text/css">
    span.highlighted {
        background-color: yellow;
    }
</style>
<script type="text/javascript">
    var highlightApplier;

    window.onload = function() {
        rangy.init();
        highlightApplier = rangy.createCssClassApplier("highlighted ", true);
    };

    function applyHighlight() {
        highlightApplier.applyToSelection();
    }
</script>

关于javascript - 如何使用 html 标记包装来自 window.getSelection().getRangeAt(0) 的文本选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765381/

相关文章:

Javascript onclick 函数传递 img src

javascript - 使用 JS 对图像进行切片和混杂

javascript - 始终提交相同的表格

javascript - 如何限制表单提交后的每次提交次数

javascript - 通过 javascript/jquery 检测网站更改

javascript - 我怎样才能隐藏卡片?

javascript - 如何根据 React、ES6 中的对象数组的搜索输入来过滤数据

javascript - 如何在 jQuery 中删除选定的消息(带有复选框)?

javascript - 将相同的元素附加到不同的元素

javascript - jQuery 使用多选选项按颜色过滤数据