javascript - 循环遍历每个元素并将值添加到新对象。将这些对象添加到数组并访问它们的值
问题描述
我有一个名为的元素lineNumber
,其中包含一些表单输入。输入的所有值都存储在变量中。
<div class="lineNumber">
<div class="input-container">
<label>Example Line 1 :</label>
<input type="text" name="lineText" value="John's Electrical" class="lineText">
</div>
<!-- more inputs... -->
</div>
在页面加载时,有这个元素的一个实例。我lineNumber
用一个按钮动态添加了新的实例。
在这个阶段,我已经检索了第一个实例的所有值,并将其放入更新 onchange 的变量中。挑战在于迭代每个新实例。
我想遍历每个实例lineNumber
并将每个变量的值存储在一个对象中。我还希望在变量也更新时更新对象值。
我有 eventListeners 检测输入的变化并更新变量的值。
//wrap this in lineNumber.length loop?
let lineText = lineNumber[i].querySelector('.lineText');
let lineTextValue = lineNumber[i].querySelector('input[name="lineText"]').value;
//end of loop?
//add event listener and update lineTextValue
lineText.addEventListener("keyup", liveTextFunction);
//store value in variable lineTextValue;
function liveTextFunction(){
lineTextValue = lineNumber[i].querySelector('input[name="lineText"]').value;
}
//createLineObject() runs when new lineNumber element added
//store values *** //
let lineObject;
function createLineObject(){
lineObject = { };
lineObject[lineNumber] = lineNumberValue;
lineObject[lineText] = lineTextValue;
};
希望以多个 lineObjects 结束,我可以从中访问值,例如
lineObject[1].lineNumberValue
或者Object.entries(lineObject[1]);
不确定这些对象是否会进入一个数组?例如
objectArray[ lineObject[1], lineObject[2] ];
希望对如何实现这一目标或对我的方法提出建设性的批评提供一些指导。我只是不确定我是否以正确的方式接近这一点并且可以使用一些反馈。
解决方案
<input/>
您尝试查询的每个人都会有name="linetext"
? 如果是这样,您可以遍历您的"lineNumber"
div 并使用以下内容遍历"linetext"
它们下面的输入:
lineObjects = Array.from(document.querySelectorAll('div.lineNumber')).map(div => {
return Array.from(div.querySelectorAll('input[name="linetext"]')).map(input => {
// do whatever you need to do with each div and input
const lineObject = {
div: div,
input: input,
value: null, // set automatically by listener
removeListener: null // call when lineObject no longer needed
};
const listener = event => {
lineObject.value = event.target.value;
}
input.addEventListener('keyup', listener);
lineObject.removeListener = () => input.removeEventListener('keyup', listener);
return lineObject;
});
});
lineObjects = lineObjects.flat(); // convert array of arrays to flat array
顺便说一句,这已经很笨拙了,而且只针对一个功能。在lineNumber
清理现有lineObjects
. 如果可能的话,我建议使用像 React 这样的框架。
推荐阅读
- javascript - 悬停图像交换的触摸替代方案
- arrays - 拆分使用 $arrayElement 如果它不存在然后 NA 在 mongoDB
- android-studio - 如何使用 GridlayoutManager 向下推 Recyclerview 的一侧以获得交错网格布局的外观
- wordpress - WordPress - woocommerce_process_shop_order_meta 不起作用
- laravel - Laravel 更新函数数据未传递到数据库但没有错误
- firebase-mlkit - MLKIt TextRecognization - 如何操作报纸内容中段落的文本块
- oracle - localhost:5500/em 用户名/密码错误--------Oracle18c快捷版
- apache-spark - 纱线版本 2.4.0-cdh6.2.1 上的 SPARK - 驱动程序使用大量 RAM 并且不使用交换
- amazon-web-services - 发布 Cloudwatch 指标,例如 DX 和 VPN 图
- git - 为什么 GitHub 让我解决实际上是添加的冲突?