从HMTL表创建Javascript对象
我有一张像这样的桌子从HMTL表创建Javascript对象,javascript,jquery,Javascript,Jquery,我有一张像这样的桌子 <table id="misc_inputs"> <thead> <tr><th>Property</th><th>Input</th></tr> </thead> <tbody> <tr>
<table id="misc_inputs">
<thead>
<tr><th>Property</th><th>Input</th></tr>
</thead>
<tbody>
<tr>
<td>a</td>
<td><input type="number" value="1"></td>
</tr>
<tr>
<td>b</td>
<td><input type="number" value="2"></td>
</tr>
...
如何生成结果?可能不需要任何库就可以生成,但使用jQuery更容易。类似的方法应该有效(未经测试):
//我们将在这里存储结果
var result={};
//要求jQuery查找每一行(TR标记),并为每一行调用一个函数
$('tr')。每个(函数(){
//在jQuery each()中,“this”是当前元素,在本例中是TR标记
var行=$(此);
//我们要求jQuery查找当前行中的每个TD(jQuery选择器的第二个参数是用于搜索的父节点)。我们获取第一个参数,然后获取标记的内容
变量标签=$(“td”,行).first().text();
//我们在当前行中请求一个“input”标记,并读取其“value”属性
变量值=$(“输入”,行).attr(“值”);
//存储所有结果
结果[标签]=值;
});代码>也许您可以在没有任何库的情况下完成,但使用jQuery更容易。类似的方法应该有效(未经测试):
//我们将在这里存储结果
var result={};
//要求jQuery查找每一行(TR标记),并为每一行调用一个函数
$('tr')。每个(函数(){
//在jQuery each()中,“this”是当前元素,在本例中是TR标记
var行=$(此);
//我们要求jQuery查找当前行中的每个TD(jQuery选择器的第二个参数是用于搜索的父节点)。我们获取第一个参数,然后获取标记的内容
变量标签=$(“td”,行).first().text();
//我们在当前行中请求一个“input”标记,并读取其“value”属性
变量值=$(“输入”,行).attr(“值”);
//存储所有结果
结果[标签]=值;
});代码>您可以循环每个输入并创建对象:
var杂项输入={};
$(“#其他输入输入[type=number]”)。每个(函数(i,el){
var k=$(this.nexist('td').prev().text();
返回其他输入[k]=+el.value;
});
控制台日志(杂项输入)代码>
财产投入
A.
B
您可以循环每个输入并创建对象:
var杂项输入={};
$(“#其他输入输入[type=number]”)。每个(函数(i,el){
var k=$(this.nexist('td').prev().text();
返回其他输入[k]=+el.value;
});
控制台日志(杂项输入)代码>
财产投入
A.
B
您可以使用下面的可重用javascript方法将任何HTML表转换为javascript对象
<table id="MyTable">
<thead>
<tr><th>Property</th><th>Input</th></tr>
</thead>
<tbody>
<tr>
<td>a</td>
<td><input type="number" value="1"></td>
</tr>
<tr>
<td>b</td>
<td><input type="number" value="2"></td>
</tr>
</tbody>
财产投入
A.
B
$(文档).ready(函数(){
函数ConvertHTMLToJSObject(htmlTableId)
{
var objArr={};
var trList=$('#'+htmlTableId).find('tr');
$('#'+htmlTableId).find('tbody tr').each(函数()
{
var行=$(此);
var key=$(行).first().text().trim();
var value=$(行).find('input').attr(“value”);
objArr[key]=值;
});
返回objArr;
}
var obj=ConvertHTMLToJSObject(“MyTable”);
控制台日志(obj);
});
您可以使用下面的可重用javascript方法将任何HTML表转换为javascript对象
<table id="MyTable">
<thead>
<tr><th>Property</th><th>Input</th></tr>
</thead>
<tbody>
<tr>
<td>a</td>
<td><input type="number" value="1"></td>
</tr>
<tr>
<td>b</td>
<td><input type="number" value="2"></td>
</tr>
</tbody>
财产投入
A.
B
$(文档).ready(函数(){
函数ConvertHTMLToJSObject(htmlTableId)
{
var objArr={};
var trList=$('#'+htmlTableId).find('tr');
$('#'+htmlTableId).find('tbody tr').each(函数()
{
var行=$(此);
var key=$(行).first().text().trim();
var value=$(行).find('input').attr(“value”);
objArr[key]=值;
});
返回objArr;
}
var obj=ConvertHTMLToJSObject(“MyTable”);
控制台日志(obj);
});
这似乎是正确的方向。我还没有完全理解它,所以我还没有接受你的答案,我正在处理你的代码。我添加了一些注释来解释代码片段的作用。这看起来非常正确。我还没有完全实现它,所以我还没有接受你的答案,我正在处理你的代码。我添加了一些注释来解释代码片段的功能
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
function ConvertHTMLToJSObject(htmlTableId)
{
var objArr = {};
var trList = $('#' + htmlTableId).find('tr');
$('#' + htmlTableId).find('tbody tr').each(function ()
{
var row = $(this);
var key = $(row).first().text().trim();
var value = $(row).find('input').attr("value");
objArr[key] = value;
});
return objArr;
}
var obj = ConvertHTMLToJSObject("MyTable");
console.log(obj);
});