javascript - 使用 appendChild 到当前聚焦的元素
问题描述
考虑这段代码:
console.log('New node')
var node = document.createElement("div");
node.appendChild(document.createTextNode("+"));
document.getElementById("elem").appendChild(node);
<!DOCTYPE html>
<html>
<body>
<div id="elem">+</div>
</body>
</html>
因此,这当前添加"+"
为新 div 的文本。
假设我想将另一个带有文本的子 div 添加">"
到用户查看 index.html 当前关注的任何 div 中,考虑到他选择了一个动态创建的 div 的选项,我该如何实现呢?
解决方案
您需要在 div 上设置选项卡索引以使其具有焦点,但随后您可以侦听焦点事件并存储最后一个焦点元素。您需要手动存储当前项目,而不是依赖于document.activeElement
获取最后一个焦点元素,因为这会更改为您单击的按钮。
const appendbtn = document.querySelector('#appendit');
const addbtn = document.querySelector('#addbox');
let activeElement = null;
let counter = 0;
appendbtn.addEventListener('click', function() {
if (activeElement) {
const node = document.createElement('span');
node.textContent = '>';
activeElement.appendChild(node);
}
});
addbtn.addEventListener('click', function() {
const text = document.createElement('span');
text.textContent = 'Box ' + (counter++);
const box = document.createElement('div');
box.tabIndex = 0;
box.classList.add('box');
box.addEventListener('focus', function() {
if (activeElement) {
activeElement.classList.remove('selected');
}
activeElement = box;
activeElement.classList.add('selected');
});
box.appendChild(text);
const container = document.querySelector('.boxes');
container.appendChild(box);
});
.box {
border: 1px solid #ddd;
border-radius: 4px;
margin: 1rem;
padding: 1rem;
}
.box.selected {
background-color: #f9f9f9;
}
<div class="boxes">
</div>
<button id="addbox">
Add box
</button>
<button id="appendit">
Append chevron
</button>
推荐阅读
- javascript - 复选框列上的Jquery DataTables Live DOM排序不起作用
- javascript - 具有异步功能的承诺不等待实现
- .net - 使用.net在kafka中自定义分区(使用基于哈希的算法)
- c - 我正在测试固态写入失败时间(c 代码)并且设备没有失败
- java - Spock 中最终类的模拟实例在测试和开发代码中的行为不同
- javascript - TypeError:String.format 不是函数
- objective-c - 解析服务器数据未在应用程序和今日扩展程序之间共享
- google-sheets - 如何将数据从谷歌电子表格的一列移动到另一个谷歌电子表格的行?
- oracle - PLSQL 过程中的 IF EXISTS 语句
- java - 如何从 ClientResponse (Jersey Client) 获取连接和读取时间