javascript - 通过 javascript 将 HTML 元素附加到 DOM 后获取
问题描述
我有一个相当简单的问题,我无法解决。我想在将 HTML 元素<input></input>
附加到 DOM 后获取它,因为我想向<li></li>
其父元素添加一些 css 类。我设法让它适用于原生<li></li>
位于我的 HTML 文件中的元素,但对于我通过将其附加到 DOM 添加的元素,我无法完成它。
一般的 HTML 结构是这样的:
<section class="main">
<input id="toggle-all" class="toggle-all" type="checkbox">
<label for="toggle-all">Mark all as complete</label>
<ul class="todo-list">
<!-- These are here just to show the structure of the list items -->
<!-- List items should get the class `editing` when editing and `completed` when marked as completed -->
<li class="completed">
<div class="view">
<input class="toggle" type="checkbox" checked>
<label>Taste JavaScript</label>
<button class="destroy"></button>
</div>
</li>
<li>
<div class="view">
<input class="toggle" type="checkbox">
<label>Buy a unicorn</label>
<button class="destroy"></button>
</div>
</li>
</ul>
</section>
我通过此代码附加了与上述元素具有相同<li></li>
HTML 结构的元素:<li></li>
document.addEventListener("DOMContentLoaded", () => {
const todoInput = document.querySelector(".new-todo");
const todoList = document.querySelector(".todo-list");
todoInput.addEventListener("keypress", (event) => {
if (event.keyCode === KEY_ENTER && todoInput.value !== "") {
const liElementTodo = createTodoItem();
todoList.appendChild(liElementTodo);
clearInputContent(todoInput);
}
});
});
然后,如果我选中该附加项目上的复选框,我想向其父<li></li>
元素添加一些 css 类,这些类适用于在“DOMContentLoaded”被触发后 DOM 中存在的 2 个项目。以下代码也放置在“DOMContentLoaded”事件的 Eventlistener 中:
inputCheckboxElements = document.querySelectorAll(".toggle");
for (const inputCheckboxElement of inputCheckboxElements) {
inputCheckboxElement.addEventListener("change", (event) => {
const parentDivElement = inputCheckboxElement.parentElement;
const parentLiElement = parentDivElement.parentElement;
console.log(inputCheckboxElement);
if (inputCheckboxElement.checked) {
checkBoxToggled(parentLiElement);
} else {
checkBoxToggled(parentLiElement);
}
});
}
我以为我能够以某种方式获得所有元素,也包括那些我通过 javascript 附加的 MutationObserver 但这对我来说不起作用。如果有人可以帮助我,那就太酷了。
编辑: MutationObserver 对象看起来像这样:
MutationObserver = window.MutationObserver;
var observer = new MutationObserver((mutations, observer) => {
console.log(mutations, observer);
inputCheckboxElements = document.querySelectorAll(".toggle");
console.log(inputCheckboxElements);
});
observer.observe(document.body, {
subtree: true,
attributes: true,
childList: true
});
解决方案
推荐阅读
- css - 使用 CSS“组合”成对的列表项
- c++ - Gtk::TextBuffer 中的标签可以用 CSS 设置样式吗
- java - 按功能和装饰器设计模式
- c# - 如何将变量转换为另一个变量的获取类型?
- api - 尝试将 X-Amz-Invocation-Type:Event 添加到现有 API Gateway POST 方法
- android - 在 android quiz android studio 中显示最终分数
- python-3.x - 将一个数字分成两个随机部分
- c# - Net Core 访问内部类成员的简单方法
- d3.js - 在常见的 x 轴上如何绘制具有不同数据集数组单位的图表(多折线图)
- jquery - 使用 JQuery 通过 div 进行轮播