如何检索td's
tr
索引(行内)不是1或2的td
?也就是说,我想跳过前两列。以下代码完成了工作,但是有更好的方法吗?我在想(td eq(0) || eq(1))
类似的东西。
$("#time-entry tr").each(function () {
var trId = $(this).attr('id');
$(String.format("#{0} td input[id^=txt]", trId)).each(function () { //rewrite
var tdIndex = $(this).index();
if(tdIndex != 1 && tdIndex != 2) {
}
});
});
答案 0 :(得分:5)
假设'index'是其父tr中该td的索引
$("#time-entry tr td").not(":nth-child(1), :nth-child(2)");
编辑: - 这个更短
$("#time-entry td:not(:nth-child(1), :nth-child(2))");
编辑2: -
关于通过.each()
函数传递的索引:
选择器(例如$(“td”))将为您提供一个元素列表,它传递的索引是它在该列表中的索引。
编辑3: - 询问:gt()
它会查找 匹配集 的索引。因此,如果匹配的集合是表格中的所有<td>
元素,则它将不适合您。它会以这种方式工作:
$("#time-entry tr").each(function () {
$("td:gt(1)", this).each(function(){
});
});
但我不知道为什么人们会赞成这种方式超过其他建议的方式。
答案 1 :(得分:2)
我想建议一种替代方法,完全忽略如何通过索引执行操作(您已经可以从其他答案中了解如何操作),而是尝试以简单且可维护的方式解决底层问题。
你在评论中说过,真正要做的是添加一些文本框并将行总数放在最后一列,所以对我来说直接选择它们而不是选择包含td
是有意义的元素。您确实注意到前两列包含您不想选择的文本框,但我们可以很容易地允许这样做。
而不是乱搞列索引,这意味着如果以后插入/删除/重新排序列,您将不得不更改代码,我建议您为要添加的元素提供一个公共类,然后(最后一列)行总数的另一个类。所以你的标记就是这样的东西:
<tr>
<td><input></td>
<td><input></td>
<td><input class="addup"></td>
<td><input class="addup"></td>
<td><input class="addup"></td>
<td><input class="total"></td>
</tr>
(显然你会有其他属性,但这只是展示课程的一个示例。)
然后JS非常简单:
// process each row
$("tr").each(function() {
var total = 0;
// select all "addup" elements in the current row
$(".addup", this).each(function() {
// add to the row total, converting to a number with
// the unary plus operator. TODO: add some validation to be
// sure the user actually entered numeric data
total += +this.value;
});
// display the total
$(".total", this).val(total);
});
如果在中间插入不应添加的额外列,没问题:没有“addup”类,它们将被自动忽略。
另请注意,您的代码:$(String.format("#{0} td input[id^=txt]", trId))
似乎正在尝试在JavaScript中间使用C#方法,这将无效。但是您不必担心尝试根据当前行的id选择元素,因为在$("tr").each()
处理程序中,关键字this
将引用当前行,因此您可以将其传递给{{ 1}}作为选择的上下文。就像上面显示的$()
一样。
答案 2 :(得分:0)
$('tr:gt(1) td')
应该这样做。
编辑:我误解了您的原始请求,并认为您想要选择除前两行之外的所有单元格。要获取除第一列之外的所有单元格,请尝试:
$('tr').each(function(){
$('td:gt(1)',this).css('background','red')
});
除了前两列中的那些单元格外,所有单元格的背景都会着色。
答案 3 :(得分:0)
您可以在回调中指定索引:
$("#time-entry tr").each(function (index, value) {
if (index != 1 || index != 2)
{
//do stuff
}
});
答案 4 :(得分:0)
这是鱼。注意:nnnnnn的解决方案是应该使用的解决方案。
$("#time-entry tr").each(function () {
var tr = $(this),
total = tr.find('td input:last'),
entries = tr.find('td:gt(1):not(td:last)').find('input'),
totalVal = 0;
entries.each(function() { totalVal += parseInt($(this).val()); });
total.val(totalVal);
});