【问题标题】:jQuery loop through table to display valuesjQuery循环遍历表以显示值
【发布时间】:2014-02-16 05:45:33
【问题描述】:

我在这里不知所措。 我创建了一个快速脚本,它将向表中添加新行,并且还具有删除行的能力。

jsFiddle -->http://jsfiddle.net/wLpJr/10/

我想要实现的是: 显示每一行的每个值(在 id='thedata' 的 div 中)

我最初是在每个 id 的末尾添加一个数字,从“1”开始,每次用户添加一行时递增。

 //This is random code
 var rowcount = parseInt($('#rowcount').val());
 var newcount = rowcount + (1*1);
 var x = $('#radioinput' + newcount).val('a value');
 $('#rowcount').val(newcount);

问题是假设您添加了 5 行。现在删除第 3 行。当您遍历数据表时,您将收到错误消息,因为第“3”行不存在。您有第 1、2、4、5、6 行。特别是 - id = 'radioinput3' 的输入将不存在。

然后我决定这样做:

 $('#maintable > tbody > tr').each(function() {
        radiovalue[i] = $("input[type='hidden']", this).map(function() {
            var vid = 'radio' + i;
            var myval = this.value;
            var radioinput = document.createElement("input");
                radioinput.type = "hidden";
                radioinput.value = myval; // set the CSS class
                radioinput.id = vid;
                $('#maintable').append(radioinput);
        }).get()
        text1value[i] = $('td > input', this).map(function() {
            var vid = 'text1pos' + i;
            var myval = this.value;
            var text1input = document.createElement('input');
            text1input.type='hidden';
            text1input.value = myval;
            text1input.id = vid;
            $('#maintable').append(text1input);
        }).get()
        text2value[i] = $('td > input', this).map(function() {
            var vid = 'text2pos' + i;
            var myval = this.value;
            var text2input = document.createElement('input');
            text2input.type='hidden';
            text2input.value = myval;
            text2input.id = vid;
            $('#maintable').append(text2input);
        }).get();
    });

这里的问题是我得到了“未定义”的值。

【问题讨论】:

  • 变量i 没有定义?您是否忘记添加要传递给$.each的函数的参数i, item

标签: javascript jquery for-loop foreach html-table


【解决方案1】:

您正在循环遍历一个计数器,每次添加新行时都会递增该计数器,但不要考虑可以随时删除行。相反,只需使用 each 函数循环遍历 DOM 中剩余的元素。

在您的表格中添加theadtbody 标签,它会让您的生活更轻松。

我不知道为什么你有那些隐藏的 div 来保存 input[type=radio] 值,你不需要它们,直接访问这些值。

$('#showdata').click(function() {
    $("#maintable tbody tr").each(function(i, v) {
        var myp = "<p>Radio value is = " + $(this).find('input[type=radio]:checked').val() 
                    + "\nText1 value is = " + $(this).find('input[id$=text1]').val() 
                    + "\nText2 value is = " + $(this).find('input[id$=text2]').val() + "</p>";
        $('#thedata').append(myp);

    });
}); 

jsFiddle Demo

您可以在输入文本字段中添加一个 CSS 类以使其更容易获取,但我只使用了 jQuery ends with 选择器。

此外,如果(document) 上的 DOM 树太高,则删除选择器,而是将其限制在尽可能近的位置,在本例中为 #maintable

【讨论】:

  • 我认为当您创建 DOM 元素时,您无法使用选择器选择它们,因此您必须使用 $(document).on('click', '#myid..
  • 不,不完全是。不起作用的是尝试将事件处理程序直接附加到 $(document).ready() 上不存在的元素(您不能附加到不存在的元素)。因此,您使用delegated events,附加到您知道将在 DOM 上准备就绪的父元素,然后“密切关注子元素”,即使是添加的新元素,因为您正在捕捉冒泡的事件。当然document级别也可以,但这并不是最好的表现。
  • 谢谢伙计。如果您在 jquery 中提供课程,请告诉我,我会在那里。 :)
猜你喜欢
  • 2017-05-21
  • 2012-07-12
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2011-03-09
  • 2011-01-05
  • 1970-01-01
相关资源
最近更新 更多