我有一个表,其中一些表有我需要运行验证的输入字段。验证后,我将一个类.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
答案 0 :(得分: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()
等组合来遍历它很可能是一个更好的解决方案。
答案 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其他名字。