如何在jQuery each()循环中获取当前元素的索引?

时间:2012-05-18 06:49:53

标签: jquery

我有一个表,其中一些表有我需要运行验证的输入字段。验证后,我将一个类.mandatory附加到空白输入字段。现在稍后,我需要循环遍历td.mandatory子项,并从表的相应th元素中获取相应的text / html。我认为最好的办法是找到td的索引并使用它来获取正确的th,但我不知道如何有效地获取td的索引。我试过像

这样的东西
$('.mandatory').each(function(){
var ind = curr_tr.find('>td').index($(this).closest('td'));//curr_tr is a reference to the current tr I am working with
var txt = $('th:eq('+ind+')').html();
})

但这似乎效率低下,如果某些.mandatory字段嵌套在td

中的其他表格中,则无效

4 个答案:

答案 0 :(得分:1)

$.each()您可以使用indexelement个参数:

$('.mandatory').each(function(index, el){
    var ind = curr_tr.find('>td').index($(this).closest('td')); //curr_tr is a reference to the current tr I am working with
    var txt = $('th:eq('+ind+')').html();
})

然而,使用index听起来并不是解决问题的最佳方法。你可以发布一些HTML,这样我们就可以看到你的DOM是如何构建的。使用closest()parent()等组合来遍历它很可能是一个更好的解决方案。

答案 1 :(得分:1)

您可以使用.closest("td")获取当前输入元素的父td,然后您可以使用.index() method找到该td的索引(相对于其兄弟td元素):

$('.mandatory').each(function(){
   var ind = $(this).closest('td').index();
   var txt = $('th:eq('+ind+')').html();
});

您不需要引用当前的tr来执行此操作,为此您不会将任何参数传递给.index()

但是根据问题中的最后一句允许嵌套表,而不是使用.each()迭代所有输入,您可以使用它来迭代包含强制输入的tds:

$('#yourtable > tr > td').has('.mandatory').each(function(){
   // "this" is the td
   var ind = $(this).index();
   var txt = $('#yourtable th:eq('+ind+')').html();
});

我正在使用.has() method将匹配的td元素集合减少为具有后代“.mandatory”元素的元素。

(无论哪种方式,你都不能使用.each()回调的索引参数(如其他答案中所示),因为它当然是所有匹配元素中的索引,而不是当前行中的索引。)

答案 2 :(得分:0)

请检查一下例如:

 $.each(['first','second'], function(index, value) { 
      alert(index + ': ' + value); 
    });

答案 3 :(得分:0)

索引和元素被提供给回调函数。

使用:

$('.mandatory').each(function(i){

或:

$('.mandatory').each(function(i, e){

这将为您提供i参数中的索引,以及e参数中的元素。如果你愿意的话,你可以自然给出parmeter其他名字。