1

我有一个可编辑的表格,并想循环访问表格以获取所有条目。但是该表有一个选项,因此您可以添加带有输入字段的行。要遍历表,我有以下代码:

function t2array() {
    var erg = [];
    $("tr").each(function (index) {
        var row = {};
        var test = ($(this).children().find('input').length > 0) ?  (this).children().find('input') : $(this).children('td');
                    row['bla'] =  ($(this).children().find('input').length > 0) ? test[0].val : test[0].textContent;
                    row['blub'] = ($(this).children().find('input').length > 0) ? test[1].val : test[1].textContent;
                    ...etc...
                    erg.push(row);
    });
}

我知道输入值的选择器不正确,但无论我尝试什么,我总是返回“未定义”或“不是函数”,我不知道如何解决这个问题。

该表非常简单,例如:

<table>
        <tr>
            <td><input type="text" value="bla"></td>
            <td><input type="text" value="blub"></td>
            <td><input type="text" value="bling"></td>
        </tr>
        <tr>
            <td>bla2</td>
            <td>blub2</td>
            <td>bling3</td>
        </tr>
</table>

我可以通过以下方式访问一个输入的值:

var bla = $(this).children().find('input').val();
                console.log(blab); 

但是我尝试了任何方法来使用三元运算符运行它并且失败了。有任何想法吗?

4

1 回答 1

1

.val()是 jQuery 对象的方法,它不是属性,而且由于您使用括号表示法,因此您应该读取元素的value 属性,因为它返回一个 HTMLInputElement 对象。

我建议使用以下.map()方法:

function getVal($elem) {
   var $i = $elem.find('input');
   return $i.length ? $i.val() : $elem.text();
}

var vals = $('tr').map(function(){
    var $c = $('td', this);
    return {
        'bla': getVal($c.eq(0)), 
        'blub': getVal($c.eq(1)),
        'bling': getVal($c.eq(2))
    }
}).get();

http://jsfiddle.net/JaQLE/

于 2013-10-09T10:41:05.987 回答