【发布时间】:2020-09-26 20:04:17
【问题描述】:
我正在使用 vanilla JS,我可以推送到数组,并从数组中删除最后一项。接下来我试图在点击时删除数组项。我在下面创建的功能有效,但它不正确?我哪里错了?我不想从 DOM 中删除该项目,我宁愿从数组中删除该项目,然后更新 UI 状态。
下面的代码:
let someData = [
'This is some serious data part 2',
'This is some serious data part 3',
'This is some serious data part 4',
];
const loopIt = (data) => {
let item = '';
for (let i = 0; i < data.length; i++) {
item += `<li>${data[i]}<button class='testBtn'>Remove ${i}</button></li>`;
}
return item;
}
let getHtml = () => {
domElem.selector.innerHTML = loopIt(someData);
}
const clickEvents = () => {
domElem.button.addEventListener ('click', function () {
let inputData = domElem.input.value;
if (inputData.length > 0) {
someData.push(inputData);
} else {
alert('no input');
}
getHtml();
});
domElem.buttonRemove.addEventListener ('click', function () {
someData.pop();
getHtml();
});
}
const removeArrayItem = () => {
let queryS = document.querySelectorAll('.testBtn');
for (let i = 0; i < queryS.length; i++) {
let index = queryS[i];
index.addEventListener('click', function () {
alert(i);
someData.splice(i, 1);
console.log(someData);
getHtml();
});
};
}
const init = () => {
getHtml();
elemAttributes();
clickEvents();
removeArrayItem();
}
let initialise = init();
我的removeArrayItem 是
- 1 - 查询 dom
(let queryS = document.querySelectorAll('.testBtn');) - 2 - 遍历数组,
返回索引值 (i)
(Loop function) - 3 - 添加事件 监听数组中的每个元素
- 4 - 删除数组项 (拼接方法)-
- 5 - 更新 UI(getHtml() 函数);
但是有什么地方出了问题?因为第一次点击后 UI 不会更新。
如果我推送项目,我无法在点击时删除它们。
【问题讨论】:
-
HTML 是如何连接到 someData 数组的?你能发布一个工作示例吗?
标签: javascript arrays