我想检查一行是否具有带有特定标题和年份的td。 这是我的函数,问题是title2和year2设置为undefined。 如何正确获取单元格值?
var table = $("#mainTable");
var exist;
$(table).find("tr").each(function () {
var title2 = $(this).find("td:nth-child(1)").html();
var year2 = $(this).find("td:nth-child(2)").html();
if (title == title2 && year == year2)
exist = true;
});
return exist;
和我的桌子:
<div class="table-responsive">
<table class="table table-condensed table-bordered table-striped table-hover" id="mainTable">
<thead>
<tr>
<th scope="col">Id</th>
<th scope="col">Emri</th>
<th scope="col">Viti</th>
</tr>
</thead>
<tbody>
@foreach (var subject in Model.Subjects)
{
<tr>
<td id="subjectId">@subject.Id</td>
<td id="subjectTitle">@subject.Title</td>
<td id="subjectYear"> @subject.Year</td>
<td>
<a id="add" class="add" title="Add" data-toggle="tooltip"><i class="material-icons"></i></a>
<a id="edit" class="edit" title="Edit" data-toggle="tooltip"><i class="material-icons"></i></a>
<a id="delete" class="delete" title="Delete" data-toggle="tooltip"><i class="material-icons"></i></a>
</td>
</tr>
}
</tbody>
</table>
</div>
答案 0 :(得分:2)
可能是由于循环中包含<thead>
行,而没有<td>
nth-child
也不是从零开始的,因此您正在寻找错误的单元格
尝试更改为,仅搜索<tbody>
行
var table = $("#mainTable");
var exist;
table.find("tbody tr").each(function () {
var title2 = $(this).find("td:eq(1)").html();
var year2 = $(this).find("td:eq(2)").html();
if (title == title2 && year == year2)
exist = true;
// break the loop once found
return false;
});
return exist;
最后,元素ID在定义上是唯一的。改用普通的类
答案 1 :(得分:1)
这只是一个建议,因为看来您已经在使用剃刀创建表,为什么不将标题和年份的数据属性添加到每一行。那么您可以使用选择器。
MeterFilter
这是一个小提琴演示(我用javascript代替了razor来创建表格,但您明白了)