Text selection in div(contenteditable) when double click

背景:

     在最近项目中,碰到一个问题:有一个可编辑的div需要双击时可编辑,blur或者回车时将编辑结果保存。你可能注意到双击时,文字会被选中,可编辑区域不会focus到光标位置。考虑到兼容性问题,写了如下代码。做个备份,以备不时之需。

js:

 1 function getMouseEventCaretRange(evt) {
 2     
 3     var range, x = evt.clientX, y = evt.clientY;
 4     
 5         // Try the simple IE way first
 6         if (document.body.createTextRange) {
 7             range = document.body.createTextRange();
 8             range.moveToPoint(x, y);
 9         }
10     
11     else if (typeof document.createRange != "undefined") {
12         // Try Mozilla's rangeOffset and rangeParent properties, which are exactly what we want
13         
14         if (typeof evt.rangeParent != "undefined") {
15             range = document.createRange();
16             range.setStart(evt.rangeParent, evt.rangeOffset);
17             range.collapse(true);
18         }
19     
20         // Try the standards-based way next
21         else if (document.caretPositionFromPoint) {
22             var pos = document.caretPositionFromPoint(x, y);
23             range = document.createRange();
24             range.setStart(pos.offsetNode, pos.offset);
25             range.collapse(true);
26         }
27     
28         // Next, the WebKit way
29         else if (document.caretRangeFromPoint) {
30             range = document.caretRangeFromPoint(x, y);
31         }
32     }
33     
34     return range;
35 }
36 
37 function selectRange(range) {
38     if (range) {
39         if (typeof range.select != "undefined") {
40             range.select();
41         } else if (typeof window.getSelection != "undefined") {
42             var sel = window.getSelection();
43             sel.removeAllRanges();
44             sel.addRange(range);
45         }
46     }
47 }
48 
49 document.getElementById("editor").ondblclick = function(evt) {
50     evt = evt || window.event;
51     this.contentEditable = true;
52     this.focus();
53         var caretRange = getMouseEventCaretRange(evt);
54       // Set a timer to allow the selection to happen and the dust settle first
55     window.setTimeout(function() {
56         selectRange(caretRange);
57     }, 0);
58   
59     return false;
60 };

html:

1 <div id="editor" contenteditable="false">Some editable text. Double click to edit</div>

 

转载于:https://www.cnblogs.com/wuya16/p/3220380.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值