如何使用JQuery循环表元素和检索数据元素?

时间:2012-03-29 12:58:32

标签: javascript jquery

我在标准的HTML 4.01 Transitional页面中有一个html表:

<table>
  <thead>
    <tr>
      <th>Col 1</th>
      <th>Col 2</th>
      <th>etc...</th>
    </tr>
  </thead>
  <tbody id="tableBodyID">
    <tr class="rowElement" data-element="some-data-here">
      <td>Some Table Data</td>
      <td>Some More Table data</td>
      <td>etc.</td>
    </tr>
    <tr class="rowElement" data-element="some-data-here">
      <td>Some Table Data</td>
      <td>Some More Table data</td>
      <td>etc.</td>
    </tr>
  </tbody>
</table>

我想循环遍历所有行并获取data-element字段中的“data”,并使用JQuery将其放入变量中。我尝试过.children(),. data()和.each()的多种变体,但是无法检索“数据”元素。

我已经尝试过(在$(document).ready()块中...):

$('tbody > tr').each(function() {
  alert( $(this).data('element'));  // CORRECTION - this works.
});

$('tbody').children().each(function() {
  alert( $(this).data('element'));  // CORRECTION - this works
});

$('.rowElement').each(function(i, obj) {
  rowValue = $(this);
  alert(rowValue.data('element'));  // CORRECTION - this works
});

欢迎任何帮助。我使用的是HTML 4.01和JQuery 1.7.1。我一直在Firefox中测试,但需要支持其他标准浏览器Firefox,Opera,Safari,Chrome和IE8 +。

(针对轻微的语法更改进行了编辑)

实际问题是一个案例问题,请参阅下面的评论。问题已解决。

3 个答案:

答案 0 :(得分:2)

这对我有用:

$('table').find('tbody > tr').each(function() {
  alert( $(this).data('element')); 
});

http://jsfiddle.net/LBKvm/

(但可能不是最有效的方式)

答案 1 :(得分:1)

使用.map.get,您可以将每个tr映射到element数据属性,以便获取这些值的数组。对于选择器,ID是最直接的,因为它直接指向tbody元素,您想要tr个后代:http://jsfiddle.net/zeFGW/

var elementValues = $("#tableBodyID tr.rowElement").map(function() {
  return $(this).data("element"); // replace each `tr` with its `element` data
}).get(); // turn jQuery object into an array

答案 2 :(得分:1)

你的逻辑/调用对我有用,你在语法上有一些问题,('element');之后的括号应该是('element'));而选择器也需要引用,tbody缺少应该是('tbody')等。

jsfiddle。 (注意我将alert替换为console.log调用)

在chrome 17中测试。

您的代码是否与问题中发布的代码不同?