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

javascript文本编辑器-如何捕获选择,javascript,jquery,Javascript,Jquery,我正在尝试编写一个简单的web文本编辑器。 我想做的是让用户在文本区域(或类似文本区域的输入)上键入文本,然后用鼠标或shift键选择文本,然后单击按钮以应用基于颜色的效果。 我的问题是: 我如何以一种不会丢失的方式捕获所选内容 按钮被点击 如何保存文本和所选内容 如何做到所见即所得 p、 我不想要一个完整的富文本编辑器。我只需要一种效果 谢谢 如何在单击按钮时不丢失选择内容 如何保存文本和所选内容 我完全相信这一点。它用另一个字符串替换当前选择 我们通过获取颜色选择器的值并将其放入sp

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

  • 我如何以一种不会丢失的方式捕获所选内容 按钮被点击
  • 如何保存文本和所选内容
  • 如何做到所见即所得
  • p、 我不想要一个完整的富文本编辑器。我只需要一种效果

    谢谢

    • 如何在单击按钮时不丢失选择内容

    • 如何保存文本和所选内容

    我完全相信这一点。它用另一个字符串替换当前选择

    我们通过获取颜色选择器的值并将其放入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
    函数替换选择(html,选择插入){
    变量sel,范围,片段;
    sel=window.getSelection();
    //测试选择对象是否至少包含一个范围
    if(sel.getRangeAt&&sel.rangeCount){
    //获取第一个范围(只有Firefox支持多个)
    range=window.getSelection().getRangeAt(0);
    range.deleteContents();
    //创建DocumentFragment以插入并填充HTML
    //需要测试range.CreateContexturalFragment是否存在
    //因为它是非标准的,IE 9不支持它
    if(range.createContextalFragment){
    fragment=range.createContextualFragment(html);
    }否则{
    //在IE9中,我们需要使用临时元素的innerHTML
    var div=document.createElement(“div”),子级;
    div.innerHTML=html;
    fragment=document.createDocumentFragment();
    while((child=div.firstChild)){
    片段。追加子对象(子对象);
    }
    }
    var firstInsertedNode=fragment.firstChild;
    var lastInsertedNode=fragment.lastChild;
    range.insertNode(片段);
    如果(选择插入){
    if(第一个插入节点){
    range.setStartBefore(firstInsertedNode);
    range.setEndAfter(lastInsertedNode);
    }
    选择removeAllRanges();
    选择添加范围(范围);
    }
    }
    }
    #输入{
    最小高度:100px;
    边界半径:5px;
    边框:1px实心#ccc;
    填充物:5px;
    边缘底部:1px;
    }
    #结果{
    显示:无;
    }
    #所见即所得输入[type=“submit”]{
    高度:2米;
    浮动:对;
    }
    
    
    • 如何在单击按钮时不丢失选择内容

    • 如何保存文本和所选内容

    我完全相信这一点。它用另一个字符串替换当前选择

    我们通过获取颜色选择器的值并将其放入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
    函数替换选择(html,选择插入){
    变量sel,范围,片段;
    sel=window.getSelection();
    //测试选择对象是否至少包含一个范围
    if(sel.getRangeAt&&sel.rangeCount){
    //获取第一个范围(只有Firefox支持多个)
    range=window.getSelection().getRangeAt(0);
    range.deleteContents();
    //创建DocumentFragment以插入并填充HTML
    //需要测试range.CreateContexturalFragment是否存在
    //因为它是非标准的,IE 9不支持它
    if(range.createContextalFragment){
    fragment=range.createContextualFragment(html);
    }否则{
    //在IE9中,我们需要使用临时元素的innerHTML
    var div=document.createElement(“div”),子级;
    div.innerHTML=html;
    fragment=document.createDocumentFragment();
    while((child=div.firstChild)){
    片段。追加子对象(子对象);
    }
    }
    var firstInsertedNode=fragment.firstChild;
    var lastInsertedNode=fragment.lastChild;
    range.insertNode(片段);
    如果(选择插入){
    if(第一个插入节点){
    range.setStartBefore(firstInsertedNode);
    range.setEndAfter(lastInsertedNode);
    }
    选择removeAllRanges();
    选择添加范围(范围);