Javascript:如何根据 html 标签扩展用户选择?

标签 javascript jquery

代码: http://jsfiddle.net/frf7w/12/

所以现在,当前方法将完全按照...选择选定的文本,并添加标签,以便在显示时页面不会爆炸。

但是我想做的是: 是,当用户选择页面的一部分时,如果选择中有不匹配的标签,选择将向前或向后跳转(取决于选择中不匹配的标签)到标签使选择有效的 html。

我之所以要这样做,是因为我希望用户能够在页面上选择文本,并能够在所见即所得编辑器中编辑该文本(我目前可以使用链接代码执行此操作) ,然后将他们编辑好的内容放回页面(目前不能这样做,因为我使用的方法添加了标签)。

最佳答案

这个 SO 答案中的 coverAll 方法正是您想要的 Use javascript to extend a DOM Range to cover partially selected nodes .由于某些原因,扩展 Selection 原型(prototype)在我的 chrome 上对我不起作用,所以我提取了代码并将 this 替换为 window.getSelection() .最终代码如下所示:

function coverAll() {
    var ranges = [];
    for(var i=0; i<window.getSelection().rangeCount; i++) {
        var range = window.getSelection().getRangeAt(i);
        while(range.startContainer.nodeType == 3
              || range.startContainer.childNodes.length == 1)
            range.setStartBefore(range.startContainer);
        while(range.endContainer.nodeType == 3
              || range.endContainer.childNodes.length == 1)
            range.setEndAfter(range.endContainer);
        ranges.push(range);
    }
    window.getSelection().removeAllRanges();
    for(var i=0; i<ranges.length; i++) {
        window.getSelection().addRange(ranges[i]);
    }
    return;
}

关于Javascript:如何根据 html 标签扩展用户选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7690319/

相关文章:

javascript - 如何获取和设置 ES6 Maps 中的数组键?

javascript - 如何使用 Phonegap 让我的应用程序运行 "Always On Top"?

javascript - 寻找一个简单的淡入淡出javascript图像旋转器

javascript - 禁用输入,直到使用 bootstrap-validator 验证先前的输入

javascript - Jquery 删除除粗体以外的所有内容

JavaScript 新日期格式

javascript - 如何在 Array.prototype 和 Object.prototype 上的 javascript 中定义方法,使其不会出现在 for in 循环中

javascript - 在一个隐藏的输入 jQuery 中获取两个输入值

javascript - ajax数据到具有相同id的输入字段

javascript - 防止链接的默认值取决于 Ajax 响应