• 编辑器


    源码:

    /// <reference path="../../Scripts/rangy-core.js" />
    /// <reference path="../../Scripts/jquery-1.7.1.min.js" />
    /// <reference path="dialog.js" />
    
    
    ; (function ($) {
    
        var _group = '<span  class="et_group"><span>';
        var $obj = $('<div class="et_main"> </div>');
        var $content = $('<div class="et_content"></div>');
        var FuncObj = {};
        var HtmlObj = {};
        var $CurrEdit = null;
        var rangAtr;
    
        var tool = {
            isNull: function (obj) {
                return obj == "" || typeof obj == "undefined";
            }
        };
    
        var rang = {
            set: function () {
                var sel = rangy.getSelection();
                if (sel && sel.getRangeAt && sel.rangeCount) {
                    rangAtr = sel.getRangeAt(0);
                } else {
                    rangAtr = null;
                }
            },
            get: function () {
                var sel = rangy.getSelection();
                if (sel && sel.getRangeAt && sel.rangeCount) {
                    var _rangArt = rangAtr;
                    if (_rangArt) {
                        sel.removeAllRanges();
                        sel.addRange(_rangArt);
                    }
                }
            },
            insert: function (_html) {
                var sel = rangy.getSelection();
                this.get();
                if (sel && sel.getRangeAt && sel.rangeCount) {
                    var _range = sel.getRangeAt(0);
                    var node = _range.createContextualFragment(_html);
                    var lastNode = node.lastChild;
                    _range.insertNode(lastNode);
                    _range.setEndAfter(lastNode);
                    _range.collapse(false);
                    sel.removeAllRanges();
                    sel.addRange(_range);
                    sel.collapseToEnd();
                }
                this.set();
            },
            getAt: function () {
                var sel = rangy.getSelection();
                if (sel && sel.getRangeAt && sel.rangeCount) {
                    return sel.getRangeAt(0);
                }
                return null;
            },
            getSelectText: function () {
                var sel = rangy.getSelection();
                if (sel && sel.getRangeAt && sel.rangeCount) {
                    return sel.toString();
                }
            }
        }
    
      
    
        var et = {
            paras: {
                bar: "",
                edit: ".edit",
                tools: ["B", "I", "U", "S", "Sup", "Sub", "|", "Link", "UnLink", "|", "Insert", "|", "View"]
            },
            init: function (_paras) {
                var _this = this, p = this.paras;
                $.extend(p, _paras);//覆盖参数
                $.each(p.tools, function (i, o) {
                    FuncObj[o] = _this._func[o];
                    HtmlObj[o] = _this._html[o];
                });
    
                //    _this._registeFunc();//注册方法
                //   _this._registerHtml();
    
                _this._loadHtml(p.tools);//加载工具栏设置字体相关按钮
    
                /*编辑框*/
                $CurrEdit = $(p.edit);;
                $CurrEdit.attr("contenteditable", true);
                $CurrEdit.on({
                    click: function () {
                        _this._css.set();
                        $CurrEdit = $(this);
                        rang.set();
                    },
                    keyup: function () { _this._css.set(); rang.set(); }
                });
            },
            _loadHtml: function (_tools) {
                var _this = this, p = this.paras;
                var _grr = [], _g = $(_group);
                _grr.push(_g);
                for (var i = 0; i < _tools.length; i++) {
                    var _t = _tools[i];
                    if (_t == "|") {
                        _g = $(_group);
                        _grr.push(_g);
                    } else {
                        var _h = HtmlObj[_t];
                        _g.append(_h);
                        _g.attr("class", "et_group");
                        $(_h).on("click", FuncObj[_t]);
                        $(_h).on("click", _this._css.curr);
                    }
                };
    
                $.each(_grr, function (i, o) {
                    $content.append(o);
                });
    
                $obj.append($content);
    
                if (!tool.isNull(p.bar)) {
                    $(p.bar).append($obj);
                } else {
                    $("body").append($obj);
                }
            },
            _func: {
                B: function () {
                    $CurrEdit[0].focus();
                    document.execCommand("Bold");
                    return false;
                },
                U: function () {
                    $CurrEdit[0].focus();
                    document.execCommand("Underline");
                    return false;
                },
                I: function () {
                    $CurrEdit[0].focus();
                    document.execCommand("Italic");
                    return false;
                },
                S: function () {
                    $CurrEdit[0].focus();
                    document.execCommand("StrikeThrough");
                    return false;
                },
                Insert: function () {
                    $CurrEdit[0].focus();
                    rang.insert("-新插入数据-");
                    return false;
                },
                Link: function () {
    
                    rang.set();
                    $.dlg.Box.Comm("Link", "添加链接地址",
                        "<div style='margin: 10px;'>
                                   <span style='display:inline-block'> 地址:<input id='a_link' style='260px;'></input></span>
                            <span style='margin-top:5px;display:inline-block'>打开方式:<select id='se_type' >
                                                <option value='_blank' >新窗口</option>
                                                <option value=''>当前窗口</option>
                                              </select></span></div>",
                               336,
                        function () {
                            var txt = $("#a_link").val();
                            var target = $("#se_type").val();
                            if (tool.isNull(txt)) {
                                $.dlg.Msg.Error("链接地址不能为空!");
                                return;
                            }
                            $CurrEdit[0].focus();
                            rang.get();
                            var _href = "http://" + txt.replace("http://", "");
                            document.execCommand('CreateLink', false, _href);
                            if (target != "") {
                                $("a[href='" + _href + "']:contains('" + rang.getSelectText() + "')").attr("target", target);
                            }
                            $.dlg.close("Link");
                        },
                        function () {
                            $.dlg.close("Link");
                        });
                    $("#a_link")[0].focus();
                    return false;
                },
                UnLink: function () {
    
                    document.execCommand('UnLink');
                    return false;
                },
                Sub: function () {
                    $CurrEdit[0].focus();
                    document.execCommand('Subscript');
                    return false;
                },
                Sup: function () {
                    $CurrEdit[0].focus();
                    document.execCommand('Superscript');
                    return false;
                },
                View: function () {
                    $.dlg.Box.Info("view", "预览", $CurrEdit.html(), 668);
                    return false;
                },
                Undo: function () {
                    document.execCommand("Undo");
                    return false;
                }
            },
            _css: {
                curr: function () {
                    if (!$(this).hasClass("et_btn_on")) {
                        $(this).addClass("et_btn_on");
                    } else {
                        $(this).removeClass("et_btn_on");
                    }
                },
                set: function () {
                    $.each(HtmlObj, function (i, o) {
                        if (o) {
                            o.removeClass("et_btn_on");
                        }
                    });
                    if (document.queryCommandState("Bold")) { HtmlObj["B"].addClass("et_btn_on"); }
                    if (document.queryCommandState("Underline")) { HtmlObj["U"].addClass("et_btn_on"); }
                    if (document.queryCommandState("Italic")) { HtmlObj["I"].addClass("et_btn_on"); }
                    if (document.queryCommandState("StrikeThrough")) { HtmlObj["S"].addClass("et_btn_on"); }
                    if (document.queryCommandState("Superscript")) { HtmlObj["Sup"].addClass("et_btn_on"); }
                    if (document.queryCommandState("Subscript")) { HtmlObj["Sub"].addClass("et_btn_on"); }
                }
            },
    
            _html: {
                B: $('<a href="javascript:;" class="et_btn">B</a>'),
                I: $('<a href="javascript:;" class="et_btn"><i>I</i></a>'),
                U: $('<a href="javascript:;" class="et_btn"><u>U</u></a>'),
                Link: $('<a href="javascript:;" class="et_btn">Link</a>'),
                UnLink: $('<a href="javascript:;" class="et_btn">UnLink</a>'),
                S: $('<a href="javascript:;" class="et_btn"><s>S</s></a>'),
                Insert: $('<a href="javascript:;" class="et_btn">Insert</a>'),
                View: $('<a href="javascript:;" class="et_btn">View</a>'),
                Sub: $('<a href="javascript:;" class="et_btn"> X<sub>2</sub></a>'),
                Sup: $('<a href="javascript:;" class="et_btn"> X<sup>2</sup></a>')
            },
            ////方法注册(已过期)
            _registeFunc: function () {
                //    FuncObj["B"] = this._func.B;
                //    FuncObj["U"] = this._func.U;
                //    FuncObj["I"] = this._func.I;
                //    FuncObj["S"] = this._func.S;
                //    FuncObj["Link"] = this._func.Link;
                //    FuncObj["UnLink"] = this._func.UnLink;
                //    FuncObj["Insert"] = this._func.Insert;
                //    FuncObj["View"] = this._func.View;
                //    FuncObj["Sub"] = this._func.Sub;
                //    FuncObj["Sup"] = this._func.Sup;
            },
            //Html内容注册(已过期)
            _registerHtml: function () {
                //HtmlObj["B"] = $('<a href="javascript:;" class="et_btn">B</a>');
                //HtmlObj["I"] = $('<a href="javascript:;" class="et_btn"><i>I</i></a>');
                //HtmlObj["U"] = $('<a href="javascript:;" class="et_btn"><u>U</u></a>');
                //HtmlObj["Link"] = $('<a href="javascript:;" class="et_btn">Link</a>');
                //HtmlObj["UnLink"] = $('<a href="javascript:;" class="et_btn">UnLink</a>');
                //HtmlObj["S"] = $('<a href="javascript:;" class="et_btn"><s>S</s></a>');
                //HtmlObj["Insert"] = $('<a href="javascript:;" class="et_btn">Insert</a>');
                //HtmlObj["View"] = $('<a href="javascript:;" class="et_btn">View</a>');
                //HtmlObj["Sub"] = $('<a href="javascript:;" class="et_btn"> X<sub>2</sub></a>');
                //HtmlObj["Sup"] = $('<a href="javascript:;" class="et_btn"> X<sup>2</sup></a>');
            }
        };
        $.etit = et;
    })(jQuery)

    页面调用:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="Scripts/jquery-1.7.1.min.js"></script>
        <link href="Content/css/et.css" rel="stylesheet" />
        <title></title>
        <link href="Content/css/dialog.css" rel="stylesheet" />
        <script src="Scripts/jquery-1.7.1.min.js"></script>
        <script src="Scripts/rangy-core.js"></script>
        <script src="Content/js/dialog.js"></script>
        <script src="Content/js/et.js"></script>
    </head>
    <body>
        <div id="toolMain"></div>
        <div class="edit">
        </div>
        <div class="edit">
        </div>
    </body>
    </html>
    <script type="text/javascript">
        $(function () {
            $.etit.init({
                bar: "#toolMain",
                edit: ".edit",
                tools: ["B", "I", "U", "S", "Sup", "Sub", "|", "Link", "UnLink", "|", "Insert", "|", "View"]
            });
        });
    </script>

    源码下载

  • 相关阅读:
    pycharm使用技巧
    for 循环
    面向对象进阶
    python实现socket上传下载文件-进度条显示
    python实现进度条--主要用在上传下载文件
    django下常用查询的API
    django下model.py模型的定义
    django下数据库配置
    ORM机制简介
    views.py文件详解
  • 原文地址:https://www.cnblogs.com/wzq806341010/p/4008274.html
Copyright © 2020-2023  润新知