jQuery技术问询:如何在当前表格行内选取指定类的表单元素
问题解决:限制表格行内元素遍历避免重复取值
你的代码出现重复取值的核心原因是:$('.T')、$('.C')、$('.R')是在整个文档范围内选择对应类的元素,每循环一行时,都会把所有行的目标元素重新遍历一遍,自然就出现了重复结果。
要解决这个问题,只需要把选择器的搜索范围限定在当前循环的行内部,用jQuery的find()方法基于当前行去查找元素即可。
修正后的完整代码
function gather() { var res = ''; var table = document.getElementById("tblQ"); for (var i = 0, row; row = table.rows[i]; i++) { if (row.style.display !== 'none') { // 仅查找当前行内的文本框 $(row).find('.T').each(function () { if ($.trim($(this).val()) !== '') res += $(this).attr('id') + '~' + $(this).val() + '\n'; }); // 仅查找当前行内的复选框 $(row).find('.C').each(function () { if ($(this).is(':checked')) res += $(this).attr('id') + '~1\n'; }); // 仅查找当前行内的单选按钮 $(row).find('.R').each(function () { if ($(this).is(':checked')) res += $(this).attr('id') + '~1\n'; }); } } alert(res); }
关键改动说明
把原来全局搜索的$('.T')改为$(row).find('.T'),这样每次循环时,只会在当前遍历的row元素内部搜索类为T的元素,同理处理复选框和单选按钮。这样就能保证每一行只收集自身包含的输入元素,不会重复获取其他行的内容。
测试后点击按钮,会得到正确的结果:
01~myText 02~1
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

