我在如何设置contentEditable
元素中的光标或插入符号索引位置方面找到了很多很好的,跨浏览器的答案,但是却没有关于如何获取或找到其索引的答案…
我想做的是知道此div中插入符号的索引,位于keyup
。
因此,当用户键入文本时,我可以随时知道其在contentEditable
元素内的光标索引。
编辑:我正在寻找div内容(文本)内的 索引 ,而不是光标坐标。
<div id="contentBox" contentEditable="true"></div>
$('#contentbox').keyup(function() {
// ... ?
});
以下代码假定:
<div>
,没有其他节点white-space
属性设置为pre
码:
function getCaretPosition(editableDiv) {
var caretPos = 0,
sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
if (range.commonAncestorContainer.parentNode == editableDiv) {
caretPos = range.endOffset;
}
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
if (range.parentElement() == editableDiv) {
var tempEl = document.createElement("span");
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
var tempRange = range.duplicate();
tempRange.moveToElementText(tempEl);
tempRange.setEndPoint("EndToEnd", range);
caretPos = tempRange.text.length;
}
}
return caretPos;
}
#caretposition {
font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="contentbox" contenteditable="true">Click me and move cursor with keys or mouse</div>
<div id="caretposition">0</div>
<script>
var update = function() {
$('#caretposition').html(getCaretPosition(this));
};
$('#contentbox').on("mousedown mouseup keydown keyup", update);
</script>
如果从中拖动元素,浏览器通常会显示如下图所示的“中间插入符号”: 我正在寻找一个简单可靠的解决方案,通过发送元素ID作为通过拖放传输数据来从内拖动元素。然后,在方法中,我打算将放在这个中间插入符号当前所在的确切位置。 问题是:我能从所有的浏览器中获得这些信息吗? 我确实有一个基地(JSFiddle),但目前对我来说远没有用。 PS:我没有使用jQuery或任何其他库。
问题内容: 我有contentEditable元素(可以是p,div,…),我想在其中获得插入符号(光标)的位置。我通常可以通过以下代码来实现: 当元素仅包含文本时,这可以很好地工作。但是,当元素包含某些HTML格式时,返回的位置将相对于所包含HTML元素内的插入符号位置。 假设contentEditable元素的内容是这样的: 如果插入符在inside内,假设在C和D之间,则上面代码返回的位置是
问题内容: 如何获取输入中文本插入符号的索引? 问题答案: -> 选择开始
问题内容: 我有一个具有contenteditable设置的div,并且在按下回车键时使用jquery捕获了按键,以调用preventDefault()。类似于 这个在光标处插入文本的问题,我想直接插入html,为简便起见,我们将其称为br标签。使用上面问题的答案实际上在IE中有效,因为它使用range.pasteHTML方法,但是在其他浏览器中,br标签将显示为纯文本而不是html。如何修改答案
问题内容: 我只需要在字符串的第3个位置插入字符“ /”即可。 即成为。 我正在使用一些程序GUI来执行此操作,它接受正则表达式模式和替换。 我知道这一定是超级简单的,但我似乎找不到简单的答案。 问题答案: 将字符串[ ] 开头的3个[ ]字符[ ] 替换为(match ,后跟a )。
问题内容: 我以这个简单的HTML为例: 我想要简单的事情- 单击按钮时,我想将插入符号(光标)放入可编辑div中的特定位置。通过网络搜索,我将这个JS附加到了按钮单击上,但是它不起作用(FF,Chrome): 是否可以像这样手动设置插入符号的位置? 问题答案: 在大多数浏览器中,您需要和对象。您可以将每个选择边界指定为一个节点,并在该节点内指定一个偏移量。例如,要将插入符号设置为文本第二行的第五