我正在使用Javascript构建一个简单易用的文本编辑器,基本上是一个所见即所得的编辑器。我将使用contenteditable
属性作为主包装(.wrapper
)。当您在.wrapper
内按下输入时,会将带有唯一id
的新<p>
元素附加到包装。Javascript - 在[contenteditable]的子元素中获取插入符号元素
我需要一种方法来获取当前选择的.wrapper
的哪个子元素(即正在聚焦或在其中有插入/文本标记)。
我搜索了几天没有任何结果,我试过使用document.elementFromPoint()
但没有任何正确的结果。
当使用$(":focus")
时,我得到整个.wrapper
而不是特定的子元素。
编辑:
例HTML结构:
<div class="container t-wrapper" contenteditable>
</div>
实施例的Javascript代码:
$(document).ready(function() {
$currentElement = $("[contenteditable]");
$(".t-wrapper").each(function() {
var id = generateIdentifier(6); // Ignore this
/* This creates the initial <p> child element, where you start typing. */
$(this).html('<p class="t-empty t-first" id="' + id + '"></p>');
$(this).on("mouseup", function() {
/* $currentElement = whatever element the caret is inside. */
});
$(this).on("keyup", function() {
/* $currentElement = whatever element the caret is inside. */
});
));
});
编辑2:
我设法GE它与mouseup
事件相当合作,因为你实际上点击了一些东西。但是,在使用键盘移动插入符号时,我需要此功能。或者,我需要一些方法来获取插入符号的位置,然后使用document.elementFromPoint()
来获取特定元素。
您是否尝试过只对选定的节点上使用CONTENTEDITABLE?例如,您可以将新的'p'设置为'contenteditable =“true”',同时禁用所有其他元素。在浏览节点树时(单击或箭头键),可以将'contenteditable'属性移到下一个元素。这似乎至少可以使用':focus'搜索子节点。 –
有一段代码吗? –
@ freestock.tk添加了一些基本的示例代码。 –