1

已解决-各种方法,谢谢我再次学到的人

的HTML

<div class="container">

  <div class="row">
    <div class="c1">value1</div>
    <div class="c2">value2</div>
    <div class="c3><input type="number" value="3" class="i1" /></div>
  </div>

  <div class="row">
    <div class="c1">value3</div>
    <div class="c2">value4</div>
    <div class="c3><input type="number" value="1" class="i1" /></div>
  </div>

</div>

我使用此代码提取值(此处稍作修改)

var fields = [ 'c1', 'c2','i1'];

var data = [];

$('.container .row').each(function(i, tr) {
    var row = {};
    for (var f = 0; f < fields.length; ++f) {
        row[fields[f]] = $(tr).find('.' + fields[f]).text()
    }
    data.push(row);
    console.log(data);
});

这很完美,但不适用于所有数据

c1 = 值1

c2 = 值2

i1 =


c1 = 值 3

c2 = 值4

i1 =

因为i1是输入,text()所以我不需要val(),我想知道如何获取 的值i1并将其添加到,row[fields[f]]因此最终输出为:

(第 1 行)c1 = value1

c2 = 值2

i1 = 3


(第 2 行)

c1 = 值 3

c2 = 值4

i1 = 1

  1. 使用if/else不起作用它会做一个或另一个
  2. 添加另一个 .find() 会破坏它
  3. 使用 function(){} 不起作用。
  4. 使用 append 或 appendTo 不起作用
  5. 在这种情况下这似乎不起作用

必须有办法做到这一点。谁能帮帮我?

4

3 回答 3

2

尝试添加 if 子句来检查元素是否属于input类型。如果是这样,它将获得价值val(),否则text()

for (var f = 0; f < fields.length; ++f) {
    var el = $(tr).find('.' + fields[f]);
    row[fields[f]] = el.is(":input") ? el.val() : el.text();
}
于 2012-06-02T00:02:12.403 回答
2

最简单的方法很简单:

var fields = ['c1', 'c2', 'i1'];

var data = [];

$('.container .row').each(function(i, tr) {

    var row = {};
    for (var f = 0; f < fields.length; ++f) {
        row[fields[f]] = $(tr).find('.' + fields[f]).text() || $(tr).find('input.' + fields[f]).val();
    }
    data.push(row);
    console.log(data);
});​

JS 小提琴演示

如果没有文本,这种方法分配text()or,如果没有文本,则分配val()特定类名的元素的 。

于 2012-06-02T00:05:28.457 回答
2

这有效 - 演示在http://jsfiddle.net/alnitak/82Tep/

var fields = {
    c1: 'text',
    c2: 'text',
    i1: 'val'
};

var data = $('.container .row').map(function(row, tr) {
    var obj = {};
    $.each(fields, function(key, func) {
        obj[key] = $('.' + key, tr)[func]();
    })
    return obj;
}).get();

早期版本不正确,因为我没有发现 OP 想要一个对象而不是内部维度的数组。

这种方法的优点是您可以在这些元素上调用其他jQuery 函数而无需更改实际代码 - 只需更改fields地图以说明您要调用哪个函数。

于 2012-06-02T00:05:56.420 回答