我有一个表允许用户添加行。当我加载页面时,它在show上有一行,隐藏了一个模板行。
我希望能够检查表中的行数,以防止用户删除所有行。
我的表定义为
<table id="tarrifItems">
<th>Item</th>
<th>Cost</th>
<tbody>
<tr>
<td><input type="text" class="form-control" id="item[]" name="item[]"></td>
<td>
<div class="input-group">
<span class="input-group-addon">£</span>
<input type="text" class="form-control money" id="cost" name="cost[]" value="0.00"/>
</div>
</td>
<td>
<span href="" class="label label-success" onclick="addRow()">+</span>
<span href="" class="label label-success" onclick="removeRow(this)">-</span>
</td>
</tr>
<tr id="tarrifTemplate" style="display: none">
<td><input type="text" class="form-control" id="item[]" name="item[]"></td>
<td>
<div class="input-group">
<span class="input-group-addon">£</span>
<input type="text" class="form-control money" id="cost" name="cost[]" value="0.00"/>
</div>
</td>
<td>
<span href="" class="label label-success" onclick="addRow()">+</span>
<span href="" class="label label-success" onclick="removeRow(this)">-</span>
</td>
</tr>
</tbody>
</table>
这给出了2行的计数,但是当我运行命令
时alert($('#tarrifItems >tbody >tr').length)
我添加了一个显示此Fiddle的小提琴 它给了我一个3的计数。任何人都可以建议我哪里出错了吗?
编辑:更新FIDDLE链接以纠正小提琴
答案 0 :(得分:2)
th
代码会创建一个新的tr
代码。因此,计数将变为3.将th
标记放在thead
标记内。然后你会得到正确的计数。查看jsfiddle
答案 1 :(得分:1)
在tbody产生额外行之前的额外行。看看:http://jsbin.com/kexuk/1/edit
计算tr
还会包含display: none
行,因为它们仍然存在于DOM中
建议:将th
元素换成明确的thead
元素,这样您的选择器就不会再抓住它们了
<thead>
<tr>
<th>Item</th>
<th>Cost</th>
</tr>
</thead>
答案 2 :(得分:1)
在您的HTML代码中 - 代码中存在两个标题单元格th
。所以第二个th
在tbody之前产生一个额外的行。
因此,您应该将th
标记放在thead
标记内。
<thead>
<tr>
<th>Item</th>
<th>Cost</th>
</tr>
</thead>
注意:根据the HTML4 specification,表格可能只有一个标题。
答案 3 :(得分:0)
答案 4 :(得分:0)
我认为最好的方法是为你添加的行设置一个特定的类。
var clone = $('#tarrifTemplate').clone();
clone.removeAttr('id');
clone.removeAttr( 'style' );
clone.addClass('addedRow') // add a class to the clone
clone.appendTo('#tarrifItems');
并在需要时计算:
alert($('#tarrifItems .addedRow').length); // should give you the exact number of rows you added.
答案 5 :(得分:0)
某些时间行计数似乎是错误的,因为 标记不正确,即应该使用开始和结束标记 正确地动态添加行时应小心