原生JS实现简单富文本编辑器2

Posted rongyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生JS实现简单富文本编辑器2相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>原生JS实现简单富文本编辑器</title>
</head>

<body>

    <center>
        <h2 style="margin:auto;">原生JS实现简单富文本编辑器</h2>
    </center>
    <hr>

    <div id="toolbar"
        style="width:700px;margin:auto;border:2px solid gray;padding: 5px;overflow: auto;font-family: ‘Courier New‘, Courier, monospace;">
        <input type="button" name="bold" value=‘加粗‘ class="bold">
        <input type="button" name="italic" value=‘斜体‘ class="italic">
        <input type="button" name="underline" value=‘下划线‘ class="decotation">
        大小
        <select name="fontSize" class="font">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="6">6</option>
            <option value="7">7</option>
            <option value="8">8</option>
            <option value="9">9</option>
        </select>
        <!-- 图片
        <select name="insertImage">
            <option value="">请选择图片</option>
            <option value="timg.jpg">timg.jpg</option>
            <option value="timg1.jpg">timg1.jpg</option>
            <option value="timg2.jpg">timg2.jpg</option>
            <option value="timg3.jpg">timg3.jpg</option>
            <option value="timg4.jpg">timg4.jpg</option>
        </select> -->
        <input type="button" name="insertImage" value=‘插入图片(未完成,可粘贴)‘ class="insImg">
        <input type="button" name="selectAll" value=‘全选‘ class="selectAll">
        <input type="button" name="undo" value=‘撤销‘ class="undo">
        <input type="button" name="justifyLeft" value=‘居左‘ class="justifyLeft">
        <input type="button" name="justifyCenter" value=‘居中‘ class="justifyCenter">
        <input type="button" name="justifyRight" value=‘居右‘ class="justifyRight">
    </div>

    <div id="edit" style="width:700px;height:500px;margin:auto;border:2px solid gray;padding: 5px;overflow: auto;"
        contenteditable="true">
    </div>

    <button id="save" style="width:300px;height:30px;margin:auto;margin-top:30px;
    background-color: green;border:1px solid green;display: block;color: white;font-family:‘Courier New‘, Courier, monospace;
    font-weight: 500;font-size: 20px;">点 击</button>

    <div id="shade" style="width:100%;height:100%;background-color: white;
    opacity:0.5;position: absolute;z-index:5;display: none;left:0;top:0;"></div>

    <script>
        (function () 
            // 富文本编辑器类
            class Editor 
                constructor() 
                    this.bindElem();
                

                bindElem() 

                    var toolbar = document.getElementById("toolbar");
                    var bs = toolbar.querySelectorAll(‘input,select‘);
                    for (var i = 0; i < bs.length; i++) 
                        if (bs[i].tagName.toLowerCase() == ‘select‘) 
                            bs[i].onchange = function () 
                                document.execCommand(this.name, true, this.value);
                            
                         else if (bs[i].tagName.toLowerCase() == ‘input‘) 
                            this.action(bs[i], bs[i].name);
                        
                    

                

                action(obj, attr) 
                    obj.onclick = function () 
                        document.execCommand(attr, true);
                    
                

            

            new Editor();

        )();


        // 监听粘贴事件
        document.querySelector(‘#edit‘).addEventListener(‘paste‘, function (e) 
            // 判断剪切板是否有内容
            if (!(e.clipboardData && e.clipboardData.items)) 
                return;
            

            for (var i = 0, len = e.clipboardData.items.length; i < len; i++) 
                var item = e.clipboardData.items[i];
                if (item.kind == "file") 
                    var blob = item.getAsFile();
                    var reader = new FileReader();
                    var imgs = new Image();
                    imgs.file = blob;
                    reader.onload = (function (aImg) 
                        return function (e) 
                            aImg.src = e.target.result;
                        
                    )(imgs)
                    reader.readAsDataURL(blob);
                    document.querySelector(‘#edit‘).appendChild(imgs);
                
            
        );

        document.getElementById("save").onclick = function () 
            alert(document.getElementById("edit").innerHTML);
        

        document.querySelector(‘.insImg‘).onclick = function()
            document.getElementById("shade").style.display = "block";
            var div = document.createElement("div");  
            div.style.cssText=
                "width:300px;height:50px;border:1px solid #000;background-color:white;" + 
                "text-align:center;line-height:50px;" + 
                "position:absolute;z-index:9;left:0; top:0;right:0;bottom:0;margin:auto;"; 
            var input = document.createElement("input");
            input.type = "file";
            div.appendChild(input);
            document.body.appendChild(div);
        
    </script>


</body>

</html>

技术图片

 

以上是关于原生JS实现简单富文本编辑器2的主要内容,如果未能解决你的问题,请参考以下文章

如何实现一个 Android 端的富文本编辑器

一款开源的 Web 富文本编辑器

JS__UEditor富文本编辑器的使用

Draft.js一个用React实现的富文本编辑器

WinForm窗体怎么实现富文本控件就像ASP那样的富文本控件

富文本编辑器——wangEditor