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>

次のようにして、1 つの入力の値にアクセスできます。

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

しかし、三項演算子で実行しようとしましたが失敗しました。何か案は?

4

1 に答える 1

1

.val()は jQuery オブジェクトのメソッドであり、プロパティではありません。また、ブラケット表記を使用しているため、HTMLInputElement オブジェクトを返すため、要素のvalue プロパティを読み取る必要があります。

.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 に答える