1

我有一个表,其中一些有我需要运行验证的输入字段。验证后,我将一个类附加.mandatory到空白输入字段。现在稍后我需要遍历td.mandatory孩子的 s 并从表格的相应th元素中获取相应的文本/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

4 回答 4

2

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

采用:

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

或者:

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

这将为您提供参数中的索引i,以及可选的参数中的元素e。如果您愿意,您可以自然地给参数起其他名称。

于 2012-05-18T06:54:33.397 回答
1

$.each()您可以使用具有index和参数:element

$('.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()etc 的组合来遍历它很可能是一个更好的解决方案。

于 2012-05-18T06:54:35.937 回答
1

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

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

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

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

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

我使用该.has()方法将匹配的 td 元素集减少到仅具有后代“.mandatory”元素的那些。

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

于 2012-05-18T07:17:45.307 回答
0

只需检查一下,例如:

 $.each(['first','second'], function(index, value) { 
      alert(index + ': ' + value); 
    });
于 2012-05-18T06:54:20.580 回答