Javascript 如何使用jQuery每个函数从html表中提取数据

Javascript 如何使用jQuery每个函数从html表中提取数据,javascript,json,html-table,Javascript,Json,Html Table,我需要从html表中提取数据以创建JSON数组 这是HTML表的结构 <table class="tableClass"> <thead class="tableHeaderClass" > <tr> <th>header_column1</th> <th>header_column2</th>

我需要从html表中提取数据以创建JSON数组

这是HTML表的结构

    <table class="tableClass">
        <thead class="tableHeaderClass" >
           <tr>
              <th>header_column1</th>
              <th>header_column2</th>
              <th>header_column3</th>
           </tr>
        </thead>
        <tbody class="tableBodyClass">
           <tr>
              <td>row1_column1</td>
              <td>row1_column2</td>
              <td>row1_column3</td>
           </tr>
           <tr>
             <td>row2_column1</td>
             <td>row2_column2</td>
             <td>row2_column3</td>
           </tr>
         </tbody>
    </table>
当我打印我的数组时,我只得到“row2\u column1,row2\u column2,row2\u column3”

无法确定我做错了什么/错过了什么。如果你能帮我解决这个问题就太好了

$('tableClass')
应该是

$('.tableClass')
调试jQuery时,始终使选择器成为最初的可疑对象。在继续链之前,检查他们是否找到元素。因此:

alert($('tableClass').length)
…将给您
0

(附注:

可以缩短为

$('tableClass').find('> tbody > tr')

您使用了错误的选择器,
$('tableClass')
将尝试选择名称为tableClass的元素,即:
您可以改为使用此选项:

$('.tableClass tbody tr')
此外,由于使用的是对象,因此数组中的每个元素都将引用同一对象

//Clones the json object, might not be the most efficient method 
var newHeader = JSON.stringify(JSON.parse(json));
//Or just create a new object each iteration
var newHeader = {};
newHeader.header_column1 = $tds.eq(0).text();
newHeader.header_column2 = $tds.eq(1).text();
newHeader.header_column3 = $tds.eq(2).text();

data.push(newHeader);

请参阅关于对象克隆。

除选择器外,对象语法无效,应为:

var json = {
    header_column1: '',
    header_column2: '',
    header_column3:''
}
此外,您将更新并推送同一对象两次,因此最终会得到对数组上上次更新的两个引用。本质上,只是在数组上获得两次“row2_column1、row2_column2、row2_column3”,而不是“row1_column1、row1_column2、row1_column3”和“row2_column1、row2_column3”

放弃顶部的var-json声明,只需在“each”中执行此操作:

var json = {}
json.header_column1 = $tds.eq(0).text();
json.header_column2 = $tds.eq(1).text();
json.header_column3 = $tds.eq(2).text();

只要使用
$('tableClass')
而不使用
,您就不可能得到任何东西。您还可以将每一行压缩为:
$('tableClass tbody tr').
无需进行查找然后再调用子对象。您的代码也毫无意义,您有header和non-headers元素,但您用名为“header\u column1”的属性填充对象文字…在尝试任何操作之前,您应该清楚您的代码逻辑。使用
=
而不是
也可以通过打开控制台或使用更好的文本编辑器轻松捕获错误。感谢反馈人员,我刚刚开始学习JS,我想我还是相当缺乏经验。我非常欢迎您的反馈t帮助我提高代码的质量..哦,顺便说一句,还有一些拼写错误..忘记了.and used=而不是:将更正我的帖子..谢谢Patrick!!,每次迭代都创建一个新对象成功!!
var json = {
    header_column1: '',
    header_column2: '',
    header_column3:''
}
var json = {}
json.header_column1 = $tds.eq(0).text();
json.header_column2 = $tds.eq(1).text();
json.header_column3 = $tds.eq(2).text();