Javascript 使用JQuery将选定(选中)数据显示为JSON结构

Javascript 使用JQuery将选定(选中)数据显示为JSON结构,javascript,jquery,datatable,Javascript,Jquery,Datatable,有表和复选框,如果选中复选框并单击按钮,则需要将选中的行数据显示为JSON结构。我尝试了下面的代码,数据为空 $(文档).ready(函数(){ $(“#btnGet”)。单击(函数(){ var数据=[]; var$headers=$(“#表1”)。查找(“th”); var$rows=$(“#表1”).find(“tbody tr input[type=checkbox]:checked”).each(函数(索引){ $cells=$(this.find(“td”); 数据[索引]={}

有表和复选框,如果选中复选框并单击按钮,则需要将选中的行数据显示为JSON结构。我尝试了下面的代码,数据为空

$(文档).ready(函数(){
$(“#btnGet”)。单击(函数(){
var数据=[];
var$headers=$(“#表1”)。查找(“th”);
var$rows=$(“#表1”).find(“tbody tr input[type=checkbox]:checked”).each(函数(索引){
$cells=$(this.find(“td”);
数据[索引]={};
$cells.each(函数(cellIndex){
数据[index][$($headers[cellIndex]).html()]=$(this.html();
});
});
警报(JSON.stringify(数据));
});
});

客户Id
名称
国家
1.
哈蒙德
美国
2.
穆达萨尔汗
印度
3.
苏珊娜·马修斯
法国
4.
罗伯特·希德纳
俄罗斯


问题在于这一行
$(this)。查找(“td:not(:first)”)
,因为这是指您的复选框,并且没有任何
td
。因此,您需要使用:

$(this).closest("tr").find("td:not(:first)")
我添加了
:not(:first)
以在创建对象时简单地删除
复选框。如果您愿意,可以将其删除

演示

$(文档).ready(函数(){
$(“#btnGet”)。单击(函数(){
var数据=[];
var$headers=$(“#表1”).find(“th:not(:first)”);
var$rows=$(“#表1”).find(“tbody tr input[type=checkbox]:checked”).each(函数(索引){
$cells=$(this.closest(“tr”).find(“td:not(:first)”);
数据[索引]={};
$cells.each(函数(cellIndex){
数据[index][$($headers[cellIndex]).html()]=$(this.html();
});
});
警报(JSON.stringify(数据));
});
});

客户Id
名称
国家
1.
哈蒙德
美国
2.
穆达萨尔汗
印度
3.
苏珊娜·马修斯
法国
4.
罗伯特·希德纳
俄罗斯


问题在于这一行
$(this)。查找(“td:not(:first)”)
,因为这是指您的复选框,并且没有任何
td
。因此,您需要使用:

$(this).closest("tr").find("td:not(:first)")
我添加了
:not(:first)
以在创建对象时简单地删除
复选框。如果您愿意,可以将其删除

演示

$(文档).ready(函数(){
$(“#btnGet”)。单击(函数(){
var数据=[];
var$headers=$(“#表1”).find(“th:not(:first)”);
var$rows=$(“#表1”).find(“tbody tr input[type=checkbox]:checked”).each(函数(索引){
$cells=$(this.closest(“tr”).find(“td:not(:first)”);
数据[索引]={};
$cells.each(函数(cellIndex){
数据[index][$($headers[cellIndex]).html()]=$(this.html();
});
});
警报(JSON.stringify(数据));
});
});

客户Id
名称
国家
1.
哈蒙德
美国
2.
穆达萨尔汗
印度
3.
苏珊娜·马修斯
法国
4.
罗伯特·希德纳
俄罗斯


许多问题。最重要的是使用.eq(cellIndex)而不是[cellIndex]

我使用
if(cellIndex>0)
忽略带有复选框的单元格,但您也可以使用另一个答案中的选择器

$(函数(){
const$headers=$(“#表1 thead tr th”);
$(“#btnGet”)。在(“单击”,函数(){
常量数据=[];
$(“#表1 t正文输入[类型=复选框]:选中”)。每个(函数(索引){
$row=$(this.recessed(“tr”);
$cells=$row.find(“td”);//或使用某些选择器忽略第一个单元格
数据[索引]={};
$cells.each(函数(cellIndex){
如果(cellIndex>0)数据[index][$headers.eq(cellIndex.html()])=$(this.html();
});
});
log(JSON.stringify(data));
});
});

客户Id
名称
国家
1.
哈蒙德
美国
2.
穆达萨尔汗
印度
3.
苏珊娜·马修斯
法国
4.
罗伯特·希德纳
俄罗斯


许多问题。最重要的是使用.eq(cellIndex)而不是[cellIndex]

我使用
if(cellIndex>0)
忽略带有复选框的单元格,但您也可以使用另一个答案中的选择器

$(函数(){
const$headers=$(“#表1 thead tr th”);
$(“#btnGet”)。在(“单击”,函数(){
常量数据=[];
$(“#表1 t正文输入[类型=复选框]:选中”)。每个(函数(索引){
$row=$(this.recessed(“tr”);
$cells=$row.find(“td”);//或使用某些选择器忽略第一个单元格
数据[索引]={};
$cells.each(函数(cellIndex){
如果(cellIndex>0)数据[index][$headers.eq(cellIndex.html()])=$(this.html();
});
});
log(JSON.stringify(data));
});
});

客户Id
名称
国家
1.
哈蒙德
美国
2.
穆达萨尔汗
印度
3.
苏珊娜·马修斯
法国
4.
罗伯特·希德纳
俄罗斯