使用jQuery从表中收集数据
我有一张桌子,看起来有点像这样:使用jQuery从表中收集数据,jquery,html,dom,jquery-selectors,Jquery,Html,Dom,Jquery Selectors,我有一张桌子,看起来有点像这样: <table> <thead> <tr> <th></th> <th>Name</th> <th>Email</th> </tr> </thead> <tbody> <tr>
<table>
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td class='checkinput'>
<input type="checkbox" name="names" value="MD5_HASH"/>
</td>
<td>
John Doe
</td>
<td>
email@mail.com
</td>
</tr>
<!-- etc. -->
</tbody>
</table>
var emails = [];
$("table tbody tr:has(input:checkbox:checked)").each(function(){
emails.push( $('td.email', $(this)).text() );
});
我如何优化它,使其能够单击输入本身,而不会发生这种冲突
另外,当我最终准备提交时,如何遍历表格并从选择了
的每一行中读取电子邮件 对于函数内部的第一个问题检查:
$("tr).click(function(e) {
if (e.target.id==xxx) // if ($('#'+e.target.id).attr('class')=='classssss') ...
....
});
如果它有id(或类-更好)是复选框,如果有
关于第二个问题:
$(".table tr:gt(0)").each (
function () {
alert($('td:eq(2)',$(this)).text());
}
);
[编辑以更正第一部分因误解而产生的错误]
为防止出现不希望出现的复选框行为,如果直接单击复选框,请退出处理程序:
$("tr").click(function(e) {
if ($(e.target).is(':checkbox')) return;
var $checkbox = $(this).find(":checkbox");
$checkbox.attr('checked', !$checkbox.attr('checked'));
});
如果事件源于复选框,我们将让复选框执行其默认行为
<>强>在刚刚检查过的行>上的电子邮件,您应该考虑在<代码> <代码>中设置<代码>类=“电子邮件”< /代码>,以便以后更改更容易。然后,使用类似这样的方法:
<table>
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td class='checkinput'>
<input type="checkbox" name="names" value="MD5_HASH"/>
</td>
<td>
John Doe
</td>
<td>
email@mail.com
</td>
</tr>
<!-- etc. -->
</tbody>
</table>
var emails = [];
$("table tbody tr:has(input:checkbox:checked)").each(function(){
emails.push( $('td.email', $(this)).text() );
});
还请注意,您可能希望修剪该字符串以删除开头和结尾处不需要的空白
要了解所使用的选择器(
:checkbox
,:checked
和:has
)。您可以阻止复选框本身的默认操作,以便只有行可以切换其状态。我不知道,这是一个想法,这就是为什么我只是发布了一条注释而不是答案。:)希望有其他人知道。+ 1,好的答案,也考虑将元素的值,而不是<代码> e>(或)代码>用<代码> PUTH()/代码>到一个本地数组。