使用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()/代码>到一个本地数组。