JavaScript文本编辑器-如何捕获选择

秋葵

我正在尝试编写一个简单的Web文本编辑器。我想做的是让用户在文本区域(或类似文本区域的输入)上键入内容,然后使用鼠标或Shift键选择文本,然后单击按钮以应用基于颜色的效果。我的问题是这样的:

  1. 如何在单击按钮时以不丢失选择的方式捕获选择
  2. 如何保存文字和选择
  3. 如何做到所见即所得

ps我不想使用完整的RTF编辑器。我只需要一种效果

谢谢

463
  • 如何在单击按钮时以不丢失选择的方式捕获选择

  • 如何保存文字和选择

我将这完全归功于@TimDown在这里对另一个问题的回答它将当前选择内容替换为另一个字符串。

我们通过获取颜色选择器的值并将其放在span标记中并插入当前选定的文本来创建字符串。

  • 如何做到所见即所得

contenteditable提交表单时,使用div并将输出漏斗到隐藏的文本区域。

到此为止。同样,第一个功能replaceSelection()不是我的代码。

document.getElementById('color').onchange = function() {
    var replace = document.createElement('span');
    replace.style.color = this.value;
    replace.textContent = window.getSelection().toString();
    replaceSelection(replace.outerHTML, true);
}

document.getElementById('wysiwyg').onsubmit = function() {
    document.getElementById('result').textContent = document.getElementById('#input').innerHTML;
}


// @TimDown
function replaceSelection(html, selectInserted) {
    var sel, range, fragment;    
    sel = window.getSelection();
    
    // Test that the Selection object contains at least one Range
    if (sel.getRangeAt && sel.rangeCount) {
        // Get the first Range (only Firefox supports more than one)
        range = window.getSelection().getRangeAt(0);
        range.deleteContents();
        
        // Create a DocumentFragment to insert and populate it with HTML
        // Need to test for the existence of range.createContextualFragment
        // because it's non-standard and IE 9 does not support it
        if (range.createContextualFragment) {
            fragment = range.createContextualFragment(html);
        } else {
            // In IE 9 we need to use innerHTML of a temporary element
            var div = document.createElement("div"), child;
            div.innerHTML = html;
            fragment = document.createDocumentFragment();
            while ( (child = div.firstChild) ) {
                fragment.appendChild(child);
            }
        }
        var firstInsertedNode = fragment.firstChild;
        var lastInsertedNode = fragment.lastChild;
        range.insertNode(fragment);
        if (selectInserted) {
            if (firstInsertedNode) {
                range.setStartBefore(firstInsertedNode);
                range.setEndAfter(lastInsertedNode);
            }
            sel.removeAllRanges();
            sel.addRange(range);
        }
    }
}
#input {
    min-height: 100px; 
    border-radius: 5px; 
    border: 1px solid #ccc;
    padding: 5px;
    margin-bottom: 1px;
}
#result {
    display: none;
}
#wysiwyg input[type="submit"] {
    height: 2em;
    float: right;
}
<form action="" method="post" id="wysiwyg">
    <div id="input" contenteditable="true"></div>
    <textarea name="result" id="result"></textarea>
    <input type="color" id="color" />
    <input type="submit" value="submit" />
</form>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用JavaScript或jquery在[b]而不是<b>的富文本编辑器中加粗文本

来自分类Dev

文本编辑器选择设置包含“ $”和“-”吗?

来自分类Dev

jQuery HTML文本编辑器选择

来自分类Dev

如何使用jquery或javascript在tejquery文本编辑器中清除值

来自分类Dev

如何验证富文本编辑器源

来自分类Dev

如何使用文本编辑器编写HTML文件

来自分类Dev

终端文本编辑器的UI如何实现?

来自分类Dev

如何从Ace文本编辑器下载内容?

来自分类Dev

如何运行与文本编辑器关联的CMD文件

来自分类Dev

umbraco如何扩展富文本编辑器

来自分类Dev

如何更改默认的文本编辑器?

来自分类Dev

如何为“文本编辑器”设置配置?

来自分类Dev

如何在文本编辑器中智能地选择文本?

来自分类Dev

真正的列模式(块选择和编辑)文本编辑器解决方案?

来自分类Dev

真正的列模式(块选择和编辑)文本编辑器解决方案?

来自分类Dev

如何使Microsoft Word选择的行为与纯文本编辑器中的行为相同

来自分类Dev

如何使用文本编辑器编辑〜/ .git / config文件?

来自分类Dev

如何在文本编辑器中切换到编辑命令

来自分类Dev

如何使用文本编辑器编辑〜/ .git / config文件?

来自分类Dev

使用nano命令时,如何在文本编辑器而不是终端中编辑文件?

来自分类Dev

如何以 root 身份在 GUI 文本编辑器中编辑文件?

来自分类Dev

如何让用户在WordPress WSIWYG文本编辑器中更改文本字体和颜色

来自分类Dev

使用JSF PrimeFaces的文本编辑器,如何使用iText在PDF中添加文本

来自分类Dev

如何在Java或文本编辑器中替换文本符号

来自分类Dev

如何将文本从我的文本编辑器发送到处理草图

来自分类Dev

如何从崇高的文本编辑器中删除文本周围的矩形框

来自分类Dev

如何更改文本编辑器中默认文本的显示方式

来自分类Dev

检测在平板反应文本编辑器中选择了哪个节点

来自分类Dev

在文本编辑器中按分隔符选择列

Related 相关文章

  1. 1

    如何使用JavaScript或jquery在[b]而不是<b>的富文本编辑器中加粗文本

  2. 2

    文本编辑器选择设置包含“ $”和“-”吗?

  3. 3

    jQuery HTML文本编辑器选择

  4. 4

    如何使用jquery或javascript在tejquery文本编辑器中清除值

  5. 5

    如何验证富文本编辑器源

  6. 6

    如何使用文本编辑器编写HTML文件

  7. 7

    终端文本编辑器的UI如何实现?

  8. 8

    如何从Ace文本编辑器下载内容?

  9. 9

    如何运行与文本编辑器关联的CMD文件

  10. 10

    umbraco如何扩展富文本编辑器

  11. 11

    如何更改默认的文本编辑器?

  12. 12

    如何为“文本编辑器”设置配置?

  13. 13

    如何在文本编辑器中智能地选择文本?

  14. 14

    真正的列模式(块选择和编辑)文本编辑器解决方案?

  15. 15

    真正的列模式(块选择和编辑)文本编辑器解决方案?

  16. 16

    如何使Microsoft Word选择的行为与纯文本编辑器中的行为相同

  17. 17

    如何使用文本编辑器编辑〜/ .git / config文件?

  18. 18

    如何在文本编辑器中切换到编辑命令

  19. 19

    如何使用文本编辑器编辑〜/ .git / config文件?

  20. 20

    使用nano命令时,如何在文本编辑器而不是终端中编辑文件?

  21. 21

    如何以 root 身份在 GUI 文本编辑器中编辑文件?

  22. 22

    如何让用户在WordPress WSIWYG文本编辑器中更改文本字体和颜色

  23. 23

    使用JSF PrimeFaces的文本编辑器,如何使用iText在PDF中添加文本

  24. 24

    如何在Java或文本编辑器中替换文本符号

  25. 25

    如何将文本从我的文本编辑器发送到处理草图

  26. 26

    如何从崇高的文本编辑器中删除文本周围的矩形框

  27. 27

    如何更改文本编辑器中默认文本的显示方式

  28. 28

    检测在平板反应文本编辑器中选择了哪个节点

  29. 29

    在文本编辑器中按分隔符选择列

热门标签

归档