javascript - 如何使用 JavaScript 或 jQuery 将选定的文本包装到特定标签中的网页中?

标签 javascript jquery html css

所以我需要找到一种方法,使用 javascript 或 jQuery 将网页中选定的(突出显示的)文本包装到特定的标记中。我设法将一些文本包装到标签中,但问题是每当我的选择包含两个不同的段落时,所选文本就会变成新的段落(即一切都变得一团糟)。这就是我得到的(我正在使用 Google Chrome 扩展中的代码):

var sel = window.getSelection();
var rng = sel.getRangeAt(0);
var wrappingNode = document.createElement("myElement");
wrappingNode.appendChild(rng.extractContents());
rng.insertNode(wrappingNode);

我正试图找到一种方法来防止搞乱网页结构。你们有什么想法吗??

我的目标是将特定的 css 样式应用到选定的文本。

谢谢!

最佳答案

FF 只是示例,因为 range.createContextualFragment 但可以使用。该 sleep 了!

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .highlight {color: red; }
    </style>
    <script>
        function highlight() {
            var text, sel, range;
            if (window.getSelection) {
                text = window.getSelection().toString();
                sel = window.getSelection();
                if (sel.rangeCount) {
                    range = sel.getRangeAt(0);
                    range.deleteContents();
                    range.insertNode(range.createContextualFragment('<span class="highlight">'+text+'</span>'));
                }
            } else if (document.selection && document.selection.createRange) {
                text = document.selection.createRange().text;
                range = document.selection.createRange();
                range.innerHTML = '<span class="highlight">'+text+'</span>';
            }
        }
    </script>
</head>

<body>
<p>lorem ipsum donor kebab</p>
<button onclick="highlight()">Click me</button>
</body>
</html>

关于javascript - 如何使用 JavaScript 或 jQuery 将选定的文本包装到特定标签中的网页中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26208811/

相关文章:

jquery - 将 Rails 表单中字符串类型的数据转换为日期

javascript - 使用 javascript 的当前时间未获取正确的位置

html - 响应式绝对定位菜单

html - 多个 rel 属性

javascript - 从 Javascript 更改 CSS 内容

javascript - React 中复杂状态的深度合并

javascript - 使用数组。 apply 生成数组

javascript - JSP 提交文本框值

Javascript 过滤函数不返回数组

javascript - jQuery AJAX + 帮助隐藏此内容