html编辑器双击事件,javascript – 双击时div中的文本选择(contenteditable)

每个当前的主要浏览器都提供了一个API来创建鼠标事件的范围,尽管需要四个不同的代码分支.

这是一些背景:

这里是一些代码:

function getMouseEventCaretRange(evt) {

var range, x = evt.clientX, y = evt.clientY;

// Try the simple IE way first

if (document.body.createTextRange) {

range = document.body.createTextRange();

range.moveToPoint(x, y);

}

else if (typeof document.createRange != "undefined") {

// Try Mozilla's rangeOffset and rangeParent properties,

// which are exactly what we want

if (typeof evt.rangeParent != "undefined") {

range = document.createRange();

range.setStart(evt.rangeParent, evt.rangeOffset);

range.collapse(true);

}

// Try the standards-based way next

else if (document.caretPositionFromPoint) {

var pos = document.caretPositionFromPoint(x, y);

range = document.createRange();

range.setStart(pos.offsetNode, pos.offset);

range.collapse(true);

}

// Next, the WebKit way

else if (document.caretRangeFromPoint) {

range = document.caretRangeFromPoint(x, y);

}

}

return range;

}

function selectRange(range) {

if (range) {

if (typeof range.select != "undefined") {

range.select();

} else if (typeof window.getSelection != "undefined") {

var sel = window.getSelection();

sel.removeAllRanges();

sel.addRange(range);

}

}

}

document.getElementById("editor").ondblclick = function(evt) {

evt = evt || window.event;

this.contentEditable = true;

this.focus();

var caretRange = getMouseEventCaretRange(evt);

// Set a timer to allow the selection to happen and the dust settle first

window.setTimeout(function() {

selectRange(caretRange);

}, 10);

return false;

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值