gpt4 book ai didi

javascript - 获取选定的文本位置并在其旁边放置一个元素

转载 作者:行者123 更新时间:2023-12-02 23:59:22 25 4
gpt4 key购买 nike

tl;博士

这个想法是允许用户标记任何文本并查看所选内容旁边的弹出菜单,以及适用于所选文本的可能操作。

<小时/>

我需要在用户选择的文本旁边放置一个绝对定位按钮。

我将鼠标事件绑定(bind)到文档,并获取选定的文本,但我目前不知道如何知道实际选择的位置,而不将其包装在某些元素,因为文本的选择可以跨多个元素,如果我将其换行,则会弄乱结构。

最佳答案

您可以将标记范围放置在选择的末尾,使用 jQuery 获取其坐标,将按钮放置在这些坐标处并删除标记范围。

以下内容应该可以帮助您入门:

var markSelection = (function() {
var markerTextChar = "\ufeff";
var markerTextCharEntity = "&#xfeff;";

var markerEl, markerId = "sel_" + new Date().getTime() + "_" + Math.random().toString().substr(2);

var selectionEl;

return function(win) {
win = win || window;
var doc = win.document;
var sel, range;
// Branch for IE <= 8
if (doc.selection && doc.selection.createRange) {
// Clone the TextRange and collapse
range = doc.selection.createRange().duplicate();
range.collapse(false);

// Create the marker element containing a single invisible character by creating literal HTML and insert it
range.pasteHTML('<span id="' + markerId + '" style="position: relative;">' + markerTextCharEntity + '</span>');
markerEl = doc.getElementById(markerId);
} else if (win.getSelection) {
sel = win.getSelection();
range = sel.getRangeAt(0).cloneRange();
range.collapse(false);

// Create the marker element containing a single invisible character using DOM methods and insert it
markerEl = doc.createElement("span");
markerEl.id = markerId;
markerEl.appendChild( doc.createTextNode(markerTextChar) );
range.insertNode(markerEl);
}

if (markerEl) {
// Lazily create element to be placed next to the selection
if (!selectionEl) {
selectionEl = doc.createElement("div");
selectionEl.style.border = "solid darkblue 1px";
selectionEl.style.backgroundColor = "lightgoldenrodyellow";
selectionEl.innerHTML = "&lt;- selection";
selectionEl.style.position = "absolute";

doc.body.appendChild(selectionEl);
}

// Find markerEl position http://www.quirksmode.org/js/findpos.html
var obj = markerEl;
var left = 0, top = 0;
do {
left += obj.offsetLeft;
top += obj.offsetTop;
} while (obj = obj.offsetParent);

// Move the button into place.
// Substitute your jQuery stuff in here
selectionEl.style.left = left + "px";
selectionEl.style.top = top + "px";

markerEl.parentNode.removeChild(markerEl);
}
};
})();

关于javascript - 获取选定的文本位置并在其旁边放置一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1589721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com