• 2017-02-20 可编辑div中如何在光标位置添加内容


     之前做了一个可编辑div需要在里面插入内容,搜了好多代码,就这个能实现我的功能,记录一下,以备以后用

    <!DOCTYPE HTML>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
        <title>UMEDITOR 简单功能</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <script type="text/javascript" src="../third-party/jquery.min.js"></script>
    </head>
    <body>
    
        <h1>UMEDITOR 简单功能</h1>
    	<script type="text/javascript">
    		$(function(){
    			$("#myEditor").focus(function(){
    		    	$("#myEditor").removeClass("flag");
    		    });
    		    /* $("#myEditor").blur(function(){
    		    	$("#myEditor").addClass("flag");
    		     }); */
    		});
    	
       		function add(){ 
       		 insertHTML("<input type='text' disabled />"); 
       		}
       		
       		 //再加入一个全屏事件  
       		     $(window).click(function(e)  
       		          {  
       		            if (window.getSelection)  
       		            {  
       		                 var getevent=e.srcElement?e.srcElement:e.target;//不要告诉我不知道这句的意思  
       		              //console.log(getevent.id,getevent.tagName);
       		                if(getevent.id!=null && getevent.id=="cmdInsert"||getevent.id=="myEditor")  
       		                {  
       		                	//alert(0);
       		                	//代表 点了插入html的按钮  
       		                    //则不执行getFocus方法  
       		                 }  
       		                else  
       		                	$("#myEditor").addClass("flag");//除非点了那个插入html的按钮 其他时候必须要执行getFocus来更新最后失去焦点的div  
       		            }  
    
       		          }) 
       		
       		       
       		function insertHTML(html)  
            {  
                var dthis=$("#myEditor")[0];//要插入内容的某个div,在标准浏览器中 无需这句话  
                //dthis.focus();
                 var sel, range; 
                 console.log($(dthis).hasClass("flag"));
                 if($(dthis).hasClass("flag")){
                	 $(dthis).html(dthis.innerHTML+html);
                	 return;
                 }
                 if (window.getSelection)  
                  {  
                         // IE9 and non-IE  
                         sel = window.getSelection();  
                         if (sel.getRangeAt && sel.rangeCount) {  
                         range = sel.getRangeAt(0);  
                         range.deleteContents();  
                         var el = document.createElement('div');  
                         el.innerHTML = html;  
                         var frag = document.createDocumentFragment(), node, lastNode;  
                         while ( (node = el.firstChild) )  
                          {  
                             lastNode = frag.appendChild(node);  
                          }  
    
                     range.insertNode(frag);  
                         if (lastNode) {  
                         range = range.cloneRange();  
                         range.setStartAfter(lastNode);  
                         range.collapse(true);  
                         sel.removeAllRanges();  
                         sel.addRange(range);  
                         }  
                        }  
                 }   
                 else if (document.selection && document.selection.type !='Control')   
                 {  		
                     $(dthis).focus(); //在非标准浏览器中 要先让你需要插入html的div 获得焦点  
              	ierange= document.selection.createRange();//获取光标位置  
                     ierange.pasteHTML(html);    //在光标位置插入html 如果只是插入text 则就是fus.text="..."  
                     $(dthis).focus();      
    
                 }  
            }  	
    	</script>
    	<button onclick="add()" id="cmdInsert" style="border: none;background-color: #fff;">增加节点</button>
        <div id="myEditor" class="flag" style="position:absolute;800px;height:240px;border:1px;border-color: red;background-color: #f5f5f5" contenteditable="true">
        	
        </div>
    	
    </body>
    </html>



  • 相关阅读:
    Vue 消息无缝滚动
    请求不携带cookie问题
    vue中添加favicon
    自定义表单-校验数据规则
    vue 刷新当前页面的方式
    读阮一峰《ECMAScript 6 入门》小结
    Java进阶知识点3:更优雅地关闭资源
    Java进阶知识点2:看不懂的代码
    用Java实现异构数据库的高效通用分页查询功能
    Java进阶知识点1:白捡的扩展性
  • 原文地址:https://www.cnblogs.com/Allen0910/p/6506246.html
Copyright © 2020-2023  润新知