效果 bash
代码markdown
<div id="range-div">我是纯文本文字,咿呀咿呀呦</div> <div onclick="textPitch()" class="btn">获取我丢失的选中</div> <script> // 选中的位置 var position = {} // 鼠标松开事件(鼠标松开的时候就获取当前选中的selection) document.onmouseup = function (e) { var selection = document.getSelection() var selectionText = selection.toString() if (selectionText) { position.anchorOffset = selection.anchorOffset position.focusOffset = selection.focusOffset } } // 选中以前勾选的文字(纯文本) function textPitch() { var selection = document.getSelection() var range = document.createRange() var rangeDivDom = document.querySelector('#range-div') var rangeText = rangeDivDom.firstChild range.setStart(rangeText, position.anchorOffset) range.setEnd(rangeText, position.focusOffset) selection.removeAllRanges() selection.addRange(range) } </script> 复制代码
效果 dom
代码oop
<div> <textarea id="range-textarea" rows="5"> 我是文本域文字,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀,咿呀咿呀呦 </textarea> </div> <div onclick="textareaPitch()" class="btn">获取我丢失的选中</div> <script> // 选中的位置 var position = {} // 鼠标松开事件(鼠标松开的时候就获取当前选中的select) document.onmouseup = function (e) { var rangeTextareaDom = document.querySelector('#range-textarea') position.start = rangeTextareaDom.selectionStart position.end = rangeTextareaDom.selectionEnd } // 选中以前勾选的文字(textarea) function textareaPitch() { var rangeTextareaDom = document.querySelector('#range-textarea') rangeTextareaDom.focus() rangeTextareaDom.setSelectionRange(position.start, position.end) } </script> 复制代码
selectionStart和setSelectionRange的文档spa
效果 插件
代码3d
<div id="rang-node"> <div style="border-bottom:1px solid black;">我是div1</div> <div style="border-bottom:1px solid black;">我是div2</div> <div style="border-bottom:1px solid black;">我是div3</div> </div> <div onclick="nodePitch()" class="btn">选中全部节点</div> <script> // 选中全部节点 function nodePitch() { const selection = document.getSelection() const range = document.createRange() var rangeNodeDom = document.querySelector('#rang-node') range.selectNode(rangeNodeDom) selection.removeAllRanges() selection.addRange(range) } </script> 复制代码
效果 code
代码orm
<div id="range-div" contenteditable> 我是添加了contenteditable属性的文本节点文字,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀,咿呀咿呀呦 </div> <div onclick="cursorPitch()" class="btn">定位我丢失的光标</div> <script> // 最后一次的range对象 var lastRange = null // 编辑框dom var rangeDivDom = document.querySelector('#range-div') // 编辑框点击事件 rangeDivDom.onclick = function (e) { var selection = document.getSelection() // 保存最后的range对象 lastRange = selection.getRangeAt(0) } // 编辑框键盘按键松开事件 rangeDivDom.onkeyup = function (e) { var selection = document.getSelection() // 保存最后的range对象 lastRange = selection.getRangeAt(0) } // 定位光标 function cursorPitch() { var selection = document.getSelection() selection.removeAllRanges() selection.addRange(lastRange) } </script> 复制代码
效果
代码
<div id="range-div" contenteditable> 我是添加了contenteditable属性的文本节点文字,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀,咿呀咿呀呦 </div> <div> <input id="insert-input" type="text"> </div> <div onclick="insertText()" class="btn">插入内容</div> <script> // 最后一次的range对象 var lastRange = null // 编辑框dom var rangeDivDom = document.querySelector('#range-div') // 编辑框点击事件 rangeDivDom.onclick = function (e) { var selection = document.getSelection() // 保存最后的range对象 lastRange = selection.getRangeAt(0) } // 编辑框键盘按键松开事件 rangeDivDom.onkeyup = function (e) { var selection = document.getSelection() // 保存最后的range对象 lastRange = selection.getRangeAt(0) } // 插入内容 function insertText() { var selection = document.getSelection() selection.removeAllRanges() selection.addRange(lastRange) var range = selection.getRangeAt(0) var textNode = range.startContainer var startOffset = range.startOffset var insertValue = document.querySelector('#insert-input').value textNode.insertData(startOffset, insertValue) range.setStart(textNode, startOffset + insertValue.length) selection.addRange(range) } </script> 复制代码
效果
代码
<div id="range-div" oninput="textInput()" contenteditable></div> <div id="tooltip" style="position: fixed;border:1px solid red;"></div> <script> // 输入事件 function textInput() { var selection = document.getSelection() var range = selection.getRangeAt(0) var rect = range.getBoundingClientRect() var tooltipDom = document.querySelector('#tooltip') tooltipDom.style.top = rect.y + 'px' tooltipDom.style.left = rect.x + 'px' tooltipDom.textContent = 'x坐标:' + rect.x + ' y坐标:' + rect.y } </script> 复制代码
效果
代码
<div> <textarea id="range-textarea" rows="5"> 我是文本域文字,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀呦,咿呀咿呀 </textarea> </div> <div> <input id="insert-input" type="text"> </div> <div onclick="insertText()" class="btn">插入内容</div> <script> // 选中的位置 var position = {} // 鼠标松开事件(鼠标松开的时候就获取当前选中的select) document.onmouseup = function (e) { var rangeTextareaDom = document.querySelector('#range-textarea') position.start = rangeTextareaDom.selectionStart position.end = rangeTextareaDom.selectionEnd } // 插入内容 function insertText() { var rangeTextareaDom = document.querySelector('#range-textarea') var insertValue = document.querySelector('#insert-input').value rangeTextareaDom.setRangeText(insertValue, position.start, position.end) rangeTextareaDom.focus() var start = position.start + insertValue.length rangeTextareaDom.setSelectionRange(start, start) } </script> 复制代码
貌似textarea中没办法获取range对象,就拿不到坐标地址,找插件搞吧