javascript - 将子元素附加到内容可编辑的 div 后,关注子元素
问题描述
我有一个将 a 添加span
到 content-editable的按钮div
。我想专注于,span
以便用户可以更改它的内容。实际上,这段代码是一个所见即所得的编辑器,因此用户可以在可编辑内容中键入一些文本div
,然后按一个按钮来键入突出显示的文本。
这是我的代码:
$("#btn").click(function () {
var newSpan = document.createElement("span");
newSpan.classList.add("highlight");
newSpan.innerHTML = ""; // the span must be empty
var myDiv = document.getElementById("editable-div");
myDiv.appendChild(newSpan);
newSpan.focus();
// here I expect to be able to change the content of the newSpan,
// but I'm still inside the myDiv element.
// <div id="editable-div" contenteditable="true">
// <span class="highlight">
// I WANT TO BE HERE AFTER APPENDING THE SPAN
// </span>
// </div>
});
CSS:
.highlight {
background-color: yellow;
}
HTML:
<div id="editable-div" contenteditable="true"></div>
<button id="btn">Highlight</button>
注意:如果跨度不为空,则代码可以正常工作,但我想附加一个空跨度。
解决方案
这是您要实现的目标的工作片段:
var timeout;
$("#btn").click(function() {
let span = "<span class='highlight' contentEditable='true'></span>";
$("#editable-div").prop("contentEditable", false);
$("#editable-div").append(span);
$("#editable-div span:last-child").focus();
$("#editable-div span").on("input", function() {
clearTimeout(timeout);
let breakOf = 1500;
timeout = setTimeout(function() {
$("#editable-div").prop("contentEditable", true);
}, breakOf);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="editable-div" contentEditable='true'>
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum
</div>
<button id="btn">Button</button>
推荐阅读
- python - SQLAlchemy TypeError: ('Params must be in a list, tuple, or Row', 'HY000')
- c# - 使用具有不同模型和 DataTemplates 的分组 ListView
- sql - 使用 DENSE_RANK() 将数据从行中提取到列中
- android - 无法禁用调试-AndroidManifest.xml
- spring-boot - 如何将“<”,“>”,“=”等运算符(小于,大于,等于)作为参数传递给springboot中的本机查询?
- python - 数字出现在浏览器中但不在 python 中
- angular - Angular formArray 不呈现工作的 mat-radio-group
- python - 将预定义的二维数组转换为二维布尔数组
- javascript - 为什么 CSS 动画会突然停止?
- javascript - 为什么 getElementById 在创建动态表时不能与 php echo 一起使用?