JavaScript 按 class 名称删除列表元素
JavaScript removing list elements by class name
我的 javascript 函数在删除元素方面遇到问题。下面是 div 菜单中的两个列表,每个 <li>
根据饮料类别和饮料本身标记为 class。我还有一个按钮可以打开一个模式框,用户可以在其中输入要删除的饮料类别。我决定通过按饮料类别将 <li>
命名为 classes 来解决这个问题,然后使用 js 函数从输入文本节点中按 class 名称获取元素并删除这些元素用户输入的内容。
<div class = "menu">
<ul>
<li class = "coffee"><a href="#">french press</a></li>
<li class = "tea"><a href="#">english breakfast/a></li>
<li class = "milk"><a href="#">whole</a></li>
</ul>
<ul>
<li class = "coffee"><a href="#">dark roast</a></li>
<li class = "tea"><a href="#">green tea</a></li>
<li class = "milk"><a href="#">two percent</a></li>
</ul>
</div>
<button type="button" id ="openmodal">Click Me!</button>
<div id="myDeleteModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<h1 class="modal-title">
<b>Type the drink category you want to remove </b>
</h1>
<input id="deletedrinktext" type="text" />
<button id="delete">Remove</button>
<button type="button" class="btn btn-defaultdeletedrink" id="closedbtn" data-dismiss="modal" onclick="">Close</button>
</div>
</div>
<script>
var modal = document.getElementById("myDeleteModal");
// Get the button that opens the modal
var btn = document.getElementById("openmodal");
var closebtn = document.getElementById("closedbtn");
// When the user clicks the button, open the modal
btn.onclick = function () {
modal.style.display = "block";
}
closebtn.onclick = function (event) {
modal.style.display = "none";
}
</script>
<script>
(function () {
document.querySelector('#delete').addEventListener('click', function () {
let inputRemover = document.querySelector('#deletedrinktext');
let itemRemover = document.createTextNode(inputRemover.value);
let listRemover = document.getElementsByClassName(itemRemover);
for (var i = 0; i < listRemover.length; i++) {
if (document.contains(listRemover)) {
listRemover[i].remove();
}
}
inputRemover.value = ""; // clear input
});
})();
</script>
所以我想要复制的是用户打开模态框,输入 coffee 并单击删除。这将从文档中删除以下两个元素:
<li class = "coffee"><a href="#">french press</a></li>
<li class = "coffee"><a href="#">dark roast</a></li>
此函数目前无法正常工作,我不确定我的 JS 在获取每个元素时是否存在错误,或者使用 class 方法是否不是解决此问题的方法?当我输入类别名称时,就像我在 HTML 中写的那样,列表中的元素仍然显示。
remove()
不是 javascript 中 Array
的函数。我认为您最好的方法是不显示要删除的元素。只需将您的处理函数更改为:
let inputRemover = document.querySelector('#deletedrinktext');
let listRemover = document.getElementsByClassName(inputRemover.value);
for (let i = 0; i < listRemover.length; i++) {
if (document.contains(listRemover[i])) {
listRemover[i].style.display = 'none';
}
}
JSFiddle 在没有模态功能的情况下尝试一下。
如果您可能想要重置列表,这对您也有帮助。为此,只需在要阻止的每个元素上设置显示 属性。
此外,我不知道这是否是复制粘贴问题,但英式早餐的 a
结束标记中缺少 <
。
我的 javascript 函数在删除元素方面遇到问题。下面是 div 菜单中的两个列表,每个 <li>
根据饮料类别和饮料本身标记为 class。我还有一个按钮可以打开一个模式框,用户可以在其中输入要删除的饮料类别。我决定通过按饮料类别将 <li>
命名为 classes 来解决这个问题,然后使用 js 函数从输入文本节点中按 class 名称获取元素并删除这些元素用户输入的内容。
<div class = "menu">
<ul>
<li class = "coffee"><a href="#">french press</a></li>
<li class = "tea"><a href="#">english breakfast/a></li>
<li class = "milk"><a href="#">whole</a></li>
</ul>
<ul>
<li class = "coffee"><a href="#">dark roast</a></li>
<li class = "tea"><a href="#">green tea</a></li>
<li class = "milk"><a href="#">two percent</a></li>
</ul>
</div>
<button type="button" id ="openmodal">Click Me!</button>
<div id="myDeleteModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<h1 class="modal-title">
<b>Type the drink category you want to remove </b>
</h1>
<input id="deletedrinktext" type="text" />
<button id="delete">Remove</button>
<button type="button" class="btn btn-defaultdeletedrink" id="closedbtn" data-dismiss="modal" onclick="">Close</button>
</div>
</div>
<script>
var modal = document.getElementById("myDeleteModal");
// Get the button that opens the modal
var btn = document.getElementById("openmodal");
var closebtn = document.getElementById("closedbtn");
// When the user clicks the button, open the modal
btn.onclick = function () {
modal.style.display = "block";
}
closebtn.onclick = function (event) {
modal.style.display = "none";
}
</script>
<script>
(function () {
document.querySelector('#delete').addEventListener('click', function () {
let inputRemover = document.querySelector('#deletedrinktext');
let itemRemover = document.createTextNode(inputRemover.value);
let listRemover = document.getElementsByClassName(itemRemover);
for (var i = 0; i < listRemover.length; i++) {
if (document.contains(listRemover)) {
listRemover[i].remove();
}
}
inputRemover.value = ""; // clear input
});
})();
</script>
所以我想要复制的是用户打开模态框,输入 coffee 并单击删除。这将从文档中删除以下两个元素:
<li class = "coffee"><a href="#">french press</a></li>
<li class = "coffee"><a href="#">dark roast</a></li>
此函数目前无法正常工作,我不确定我的 JS 在获取每个元素时是否存在错误,或者使用 class 方法是否不是解决此问题的方法?当我输入类别名称时,就像我在 HTML 中写的那样,列表中的元素仍然显示。
remove()
不是 javascript 中 Array
的函数。我认为您最好的方法是不显示要删除的元素。只需将您的处理函数更改为:
let inputRemover = document.querySelector('#deletedrinktext');
let listRemover = document.getElementsByClassName(inputRemover.value);
for (let i = 0; i < listRemover.length; i++) {
if (document.contains(listRemover[i])) {
listRemover[i].style.display = 'none';
}
}
JSFiddle 在没有模态功能的情况下尝试一下。
如果您可能想要重置列表,这对您也有帮助。为此,只需在要阻止的每个元素上设置显示 属性。
此外,我不知道这是否是复制粘贴问题,但英式早餐的 a
结束标记中缺少 <
。