2

Is there an easy way to get all the table rows from a table without using a loop.

I thought that this would work but it only alerts the first row.

http://jsfiddle.net/THPWy/

    $(document).ready(function () {

        var O = $('#mainTable').find('tr');
        //var O = $('#mainTable tr');

        alert(O.html());

       //alerts     <th>Month</th><th>Savings</th> 

    });





<table id ="mainTable" border="1">
  <caption>Monthly savings</caption>
  <tr>
    <th>Month</th>
    <th>Savings</th>
  </tr>
  <tr>
    <td>January</td>
    <td>$100</td>
  </tr>
  <tr>
    <td>February</td>
    <td>$50</td>
  </tr>
  <tr>
    <td>March</td>
    <td>$50</td>
  </tr>
  <tr>
    <td>a</td>
    <td>$50</td>
  </tr>
  <tr>
    <td>m</td>
    <td>$50</td>
  </tr>
  <tr>
    <td>j</td>
    <td>$50</td>
  </tr>
  <tr>
    <td>july</td>
    <td>$50</td>
  </tr>
  <tr>
    <td>aug</td>
    <td>$50</td>
  </tr>
  <tr>
    <td>sep</td>
    <td>$50</td>
  </tr>
</table>
4

4 回答 4

3

无论您使用什么,都将遍历每一行以从中获取内部 HTML。所以不,你不能没有循环。

如果这是您所追求的,这是一种替代方法,可以在一行中获取消息,但它的效率略低于使用循环,因为它需要创建一个新数组。

jsFiddle

$(document).ready(function () {
    var rows = $('#mainTable tr');
    var message = $.map(rows, function (v) { 
        return v.innerHTML;
    }).join('\n');
    alert(message);
});

我建议只在常规循环中进行。


仅供参考.html(),仅提醒第一行,因为这是它的设计目的,因为这将是最有用的。

描述:获取匹配元素集中第一个元素的 HTML 内容。

于 2013-05-10T08:09:41.373 回答
1

关于什么:

// get all tr (excluding the caption)
var O = $('table#mainTable').children().slice(1); 

http://jsfiddle.net/THPWy/7/

于 2013-05-10T08:15:22.467 回答
1

您在代码中拥有的内容已经将所有表行作为array元素jQuery检索:

var trs = $('#mainTable').find('tr');

如果要打印每一行的 html 内容,则必须使用循环:

trs.each(function (index, element) {
    alert($(this).html());
});
于 2013-05-10T08:06:14.273 回答
0

你可以通过使用

gt(), lt(),eq()

.gt(index)// 将获取所有大于指定索引的行

.lt(index)// 将获取小于指定索引的所有行

.eq(index)// 将获取所有等于指定索引的行

例如

$('#mainTable tr').eq(1)会给第二行

但是,当您想知道所有表行数据时,请使用 Konstantin D - Infragistics 解决方案

于 2013-05-10T08:05:23.393 回答