• 让俺内牛满面的编辑器啊~


         先说做的是什么哈。  一个发言框,功能不多。 要求能插入表情,最终得到的代码表情不是<img>标记,而是类似 /:haha 的表情代码。项目做的时候有些部分用了Jquery直接上代码了

    下面是一个表情列表,为了简单我直接在li里面放图片的文件名称,而class 属性用来存放对应的标记

    <ul id="faceList">
    <li class="wx">0.gif</li>
    <li class="pz">1.gif</li>
    <li class="se">2.gif</li>
    </ul>

    接下来把上面的 li 变成 img

    var faceDir = "images/"; //配置表情目录
    var iframeDocument = null;
    var iframeWindow = null;
    var isIe = false;
     
    $.each($(
    "#faceList>li"), function(){     //展现表情
                                  var node = document.createElement("img"); 
                               node.className = $(this).attr("class"); 
                               node.src = faceDir+$(this).html();   
                               this.innerHTML = "";                    
                               this.appendChild(node);                       
            });

     放一个 iframe  用来做编辑器

    <iframe id="Edit" frameborder="0"></iframe>

     先得到 ifame

    iframeWindow = document.getElementById("Edit").contentWindow;
    iframeDocument
    = document.getElementById("Edit").contentWindow.document;
    iframeDocument.designMode="On";  //打开iframe 编辑模式

    .designMode="On"; 这个方法还是蛮常见的。 刚开始做的时候还想用 textarea 但是textarea不能显示图片。这里在实际过程中发现与  textarea 的一个差异,iframe 内不会自己换行,所以为iframe 添加了一个body设置了一个word-wrap属性

    iframeDocument.write("<html><body style=\"word-wrap:break-word;
    text-align: left; background-color: #fff;
    border:1px solid #CCC; margin:0px; padding:0px;
    overflow:hidden;\"></body></html>");

    下面实现,在iframe 插入图片表情的过程(代码内有注释) 

    $("#faceList>li").click(function(){
                    
    var $this = $(this);
                    
    var $thisImg = $(this).find("img:eq(0)"); //当前点击的表情(IMG标记)
                    document.getElementById(
    "Edit").contentWindow.focus(); //使编辑区域得到焦点
                    var r = null;

                        if(document.selection//处理兼容性问题

                        {
                            //把表情放入iframe
                            r
    = iframeDocument.selection.createRange();
                            iframeDocument.selection.empty();
                            r.pasteHTML($thisImg[
    0].parentNode.innerHTML.toString());
                        }
                        else if(window.getSelection)

                        {
                            r
    = iframeWindow.getSelection().getRangeAt(0);
                            iframeWindow.getSelection().removeAllRanges();
                           
    var node = document.createElement("img");
                            node.className
    = $thisImg.attr("class");
                            node.src
    = $thisImg.attr("src");
                            r.surroundContents(node);
                        }
                   });

    到这里,就完成了插入表情的过程。还有最后一件事情:翻译img 标记

    function GeteEditData()
    {
       
    var edit = iframeDocument.getElementsByTagName("body")[0].innerHTML;
       
    //在内存中Copy一个该节点副本,以保全文档流格式
        var str = new String(edit);
       
    var $content = $("<div>"+str+"</div>");
       
    var imgNode = $("#faceList img");
        $.each(imgNode,
    function(){
                                
    var mark= "/:"+$(this).attr("class").toString();
                                
    var fs = $content.find("."+$(this).attr("class").toString());
                                
    if(fs!=null&&fs[0]!=undefined)
                                 {
                                     fs.replaceWith(mark);
                                 }
                                 });

    }

    其实还有很多问题没有处理,俺也只是一知半解。把代码贴出来希望能帮助一些朋友解决问题。~~第一次发文章啊~~~~

  • 相关阅读:
    js关闭窗口
    利用DotNetZip服务端压缩文件并下载
    .net 文件下载
    js在一定时间内跳转页面及各种页面刷新
    hosts 配置
    js判断字段是否为空 isNull
    js enter键激发事件
    解决iframe在移动端(主要iPhone)上的问题
    17年年终总结——走过2017,迎来2018Flag
    Node.js系列-express(上)
  • 原文地址:https://www.cnblogs.com/Zendic/p/1778782.html
Copyright © 2020-2023  润新知