迭代表列和&构造JSON - jQuery

时间:2015-09-27 14:37:15

标签: javascript jquery dom

这可能是一个微不足道的问题,但我有点困惑如何提取列数据&构建一个对象。

该表本质上是动态的,基于提供的数据生成。

格式是这样的

<tr>
   <td> Label </td>
   <td> 
        <input type = "radio" value="yes"/> YES 
        <input type = "radio" value="no"/>  NO  
        <textarea> 
   </td>
   <td> 
        <input type = "radio" value="yes"/> YES 
        <input type = "radio" value="no"/>  NO  
        <textarea> 
   </td>

   // This structure can repeat
   ...
   ...
</tr>

// Rows will repeat themselves

到目前为止我已经记下了这个

$(function () {
$('#submit').click(function () {
    var i = 0;
    var t = document.getElementById('table');
    $("#table tr").each(function () {
        var columns = $(this).find('td');

        /* how to extract column data here?, so that I construct
           a column object and keep looping for the other columns 


    });
});

我的JSON需要像这样: [{label:data,isPresent:data,value:data},{..},{..}]

我无法一次获取两个列()的数据,然后循环接下来的两列。

1 个答案:

答案 0 :(得分:1)

从你的问题来看,我认为你是jQuery的新手,所以我会给你一个简单的解决方案,可以在很多方面使用。

我建议你在HTML中添加类。这样,我们就可以识别表行的所有属性,而不管HTML元素在tr-tag中的位置或数据放入的标记类型:

<tr>
   <td class="item-label"> Label </td>
   <td> 
        <input class="item-option-yes" type="radio" value="yes"/> YES 
        <input class="item-option-no" type="radio" value="no"/>  NO  
   </td>
   ... other cells with data ...
</tr>
... other rows ...

在你的每个函数中,你可以结合$(this)和find() - 函数来构造你的JSON对象

$(function () {
$('#submit').click(function () {
    var itemArray = [];

    $("#table tr").each(function (index) {
        var itemData = {
            "label": $(this).find(".item-label").text(),
            "isPresent": $(this).find(".item-option-yes")[0].checked,
            "value": $(this).find(".some-other-class").text()
        };
        itemArray.push(itemData);
    });
});

有关find,$(this)和each-functions的更多信息,请查看jQuery网站