Jquery 是否有更有效的方法通过单击表中的链接来检索复选框元素?

Jquery 是否有更有效的方法通过单击表中的链接来检索复选框元素?,jquery,html,Jquery,Html,我有一张包含大量数据的表格。在表中,同一行中有一个用于检索复选框属性的链接 我遇到的问题是如何准确定位checkbox元素并确定其是否已选中。到目前为止,我已经有了使用Jquery的代码,通过抓取链接的id,并使用最近的和大量prev方法调用以及最后的子对象(0)调用在行中导航,来完成我需要它完成的任务 我想知道是否有一种更有效的方法来获取checkbox元素,而不必遍历整行数据?例如仅使用数据属性和id。到目前为止,与我尝试的方法不同,这是我能想到的唯一一种保持我想要的功能的方法。下面是最简单

我有一张包含大量数据的表格。在表中,同一行中有一个用于检索复选框属性的链接

我遇到的问题是如何准确定位checkbox元素并确定其是否已选中。到目前为止,我已经有了使用Jquery的代码,通过抓取链接的
id
,并使用
最近的
和大量
prev
方法调用以及最后的
子对象(0)
调用在行中导航,来完成我需要它完成的任务

我想知道是否有一种更有效的方法来获取checkbox元素,而不必遍历整行数据?例如仅使用
数据属性
id
。到目前为止,与我尝试的方法不同,这是我能想到的唯一一种保持我想要的功能的方法。下面是最简单的代码,只有选中Apple复选框时才会发出警报,只是为了显示我所拥有的功能。也非常感谢任何帮助

$(文档).ready(函数(){
$(文档)。在('单击','下载链接',函数()上){
var id=$(this.attr('id');
var appleCheckbox=$('#'+id).最近的('td').prev('td').prev('td').prev('td').prev('td')).prev('td').prev('td').children(0);
if(appleCheckbox.is(':选中')){
警报(“已检查”);
}
});
});

苹果
橙色
名称
月
城市
行动
乔
也许
犹他州
试试这个

我希望你一定有独特的一排。因此,您可以生成id chkAppleBox+downloaddid 比如:chkAppleBox1000,chkAppleBox1001

<tr>
                <td>
                    <input id="chkAppleBoxDownloadId" type="checkbox" name="appleBox">
                </td>
                <td>
                    <input type="checkbox" name="orangeBox">
                </td>
                <td>
                    Joe
                </td>
                <td>
                    May
                </td>
                <td>
                    Utah
                </td>
                <td>
                    <a href="#" id="downloadLink"><span id="downloadId">Dload</span></a>
                </td>
            </tr>

首先,我建议阅读:

是的,我喜欢。我可以访问脚本文件和html文件

我强烈建议创建一个类容器,它可能如下所示(但将其更改为一个好的名称,我选择这个名称以使其脱颖而出)。该容器用于在元素中定义所有操作的范围。通过使它成为一个类而不是TR,它允许您的html在不破坏javascript的情况下进行更改。(例如,可能有人进来将表从table/tr/td更改为bootstrap div,在这种情况下,您的原始代码将中断


乔
也许
犹他州
然后您的javascript可以简单地查找容器,然后在容器中找到您想要的内容

$(文档).ready(函数(){
$(文档)。在('单击','下载链接',函数()上){
var$this=$(this);
var id=$this.attr('id');
var appleCheckbox$=$this.parents('my-container-class'.find('[name=“appleBox”]);
if(appleCheckbox.is(':选中')){
警报(“已检查”);
}
});
});
这只是使用JQuery搜索父容器,然后查找容器中的元素。所有这一切都意味着您的html可以大幅更改,但不会破坏您的javascript(假设您的类和输入名称没有更改)

但是如果您有多行,并且apple列的每个复选框都有相同的名称,您不会遇到问题吗

即使使用重复的Id,此代码仍然可以工作(因为下面的代码不使用Id,也不应该使用Id,我以前的代码不应该使用Id)

$(文档).ready(函数(){
$('.js downloadLink')。在('click',function()上{
var$this=$(this);
var$container=$this.parents('.my container class');
var$checkbox=$container.find('[name=“appleBox”]');
如果($checkbox.is(“:checked”)){
警报(“已检查”);
}否则{
警报(“未检查”);
}
});
});


您可以访问生成HTML的代码吗?@ErikPhilips是的,我可以。我可以访问脚本文件和HTML文件谢谢您的建议,但如果可以避免的话,我不想更改原始元素的HTML属性。这是一个很好的解决方案,但是如果您有多行和每个chec,您不会遇到问题吗苹果专栏的kbox名称相同?@King11否,因为事件包含在元素中。我将添加代码进行演示。啊,好的,很好。我已经将您的逻辑融入了我的代码中,并且工作得很好。非常感谢您的帮助。也非常感谢您的解释。这个网站确实需要像这样更详细的答案。@King11 I同意。尝试这个答案真让我恼火。
$(document).on('click', '#downloadLink', function(){
var id = $(this).attr('id');
var appleCheckbox = $('#chkAppleBox' + id);
    if(appleCheckbox.is(':checked')){
        alert("checked");
    }
});