javascript - Javascript 活动 MutationObserver 可处理各种元素
问题描述
我想在 a 中的数字更改required
时添加或删除 attr 。如果没有s将添加 attr ,如果有s 将删除 attr 。li
ul
li
required
li
required
该功能很好用,但仅适用于第一个input[type="file"]
我希望该功能适用于页面中的所有文件输入。我想让它观察每一个的变化。
我以为做
const fileList = document.querySelectorAll('ul.file-list')[x];
observer.observe(fileList, {
childList: true
})
但我有两个问题:
- 如何找到
ul.file-list
我正在工作的数组位置(而不是x
)。 - 我不喜欢使用事件监听器。
任何帮助都会很棒。
const observer = new MutationObserver(function(mutations){
mutations.forEach(function(mutation){
let liLength = mutation.target.getElementsByTagName("li").length;
if(mutation.addedNodes.length){
console.log('added',mutation);
if(liLength != 0){
mutation.target.parentElement.getElementsByTagName('input')[0].required = false;
}
}
if(mutation.removedNodes.length){
if(liLength == 0){
mutation.target.parentElement.getElementsByTagName('input')[0].required = true;
}
}
});
});
const fileList = document.querySelector('ul.file-list');
observer.observe(fileList, {
childList: true
})
这是 html 标记。这是我拥有的页面中的 27 个 ul 之一
<div class="custom-file" id="tz-file">
<label class="custom-file-label" for="tzfile">add file</label>
<ul class="file-list">
<li><a href="./uploads/9999999/1.pdf" target="_blank"> 1.pdf </a>
<span class="item-file" id="2018-9999999-21314-1">remove file</span></li>
</ul>
<input type="file" class="custom-file-input" id="tzfile" name="tzfile">
</div>
解决方案
推荐阅读
- c# - 制作 IEndpointRouteBuilder 扩展方法的正确方法是什么
- ssas - 将行号/排名添加到 ssas 表格模型
- python - 通过更改字体嵌入来减小使用 matplotlib 创建的 PDF 的文件大小
- vue.js - 为什么每次重新渲染时,Vue 动态组件都会在循环内销毁?
- python - 如何使用pdfkit(python)将页面强制为A4
- jsf - 未呈现的 p:dataTable 以 pe:exporter PDF 结尾
- powershell - 用于循环通过 Azure Key Vault 颁发策略的 Powershell 脚本
- git - 在另一个分支上重新设置两个分支(不是主分支)
- ios - 切换 TableViewCell 点击开关
- java - 如何在不从测试类传递参数的情况下编写 JUnit 测试用例