[英]How can I get the "drop caret position" from contenteditable?
如果從contenteditable
拖動一個元素,瀏覽器通常會顯示這樣一個“中間插入符號”,如下圖所示:
我正在尋找一種簡單可靠的解決方案,通過拖放將元素 ID 作為傳輸數據發送,從而從contenteditable
拖動元素。 然后,在ondrop
方法中,我打算將draggable
放置在此“中間插入符”當前所在的確切位置。
問題是:我能從所有瀏覽器中獲取這些信息嗎?
我確實有一個基礎( JSFiddle ),但目前這對我來說遠沒有用。
PS:我沒有使用 jQuery 或任何其他庫。
查看document.caretRangeFromPoint
和e.rangeParent, e.rangeOffset
。
這是一個演示https://jsfiddle.net/znghofxt
function dragElement(e) { e.dataTransfer.setData('text/plain', e.target.id); } function drop(e) { e.preventDefault(); var id = e.dataTransfer.getData("text/plain"); if (document.caretRangeFromPoint) { // edge, chrome, android range = document.caretRangeFromPoint(e.clientX, e.clientY) } else { // firefox var pos = [e.rangeParent, e.rangeOffset] range = document.createRange() range.setStart(...pos); range.setEnd(...pos); } range.insertNode(document.getElementById(id)); }
.fancy { background-color: #123456; color: white; border-radius: 8px 8px 8px 8px; cursor:pointer; display: inline-block; padding: 20px; } .fancy-img { cursor:pointer; display: inline-block; }
<div contenteditable="true" ondrop="drop(event)"> More blah about <a id="dragme" href="http://www.google.com" class="fancy" contenteditable="false" ondragstart="dragElement(event)"> :( </a> Sparta! </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.