我有以下jquery函数
function checkIfAnyExist() { //new input
var number = 0;
if ($(this).length) {
var number = number + 1;
}
console.log(number);
}
我使用以下方式致电
:$("#myTable tr:not(.discarded,.old) td:nth-child(1)").each(checkIfAnyExist);
但是,由于重置了每个行号,此代码无法正常工作。我尝试取出var number = 0
并将其放在调用函数上方,但这也不起作用。
有什么想法吗?
谢谢
答案 0 :(得分:2)
您要声明两次变量:一次在函数中,一次在if
条件内。这两个定义都会在每次函数迭代时将变量重置为零。
考虑在函数范围之外声明一次number
。这样,可以在每次调用该函数时将其递增。
function checkIfAnyExist() {
if ($(this).length) {
number++;
}
console.log(number);
}
var number = 0;
$("#myTable tr:not(.discarded,.old) td:nth-child(1)").each(checkIfAnyExist);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<table id="myTable">
<tr><td></td></tr>
<tr><td></td></tr>
<tr><td></td></tr>
<tr><td></td></tr>
<tr class="discarded"><td></td></tr>
<tr class="old"><td></td></tr>
</table>
然后,您要计算不是.discarded
或.old
的行中“第一个单元格”的数量。
正如@TylerRoper明智地解释的那样,$(this).length
在这种情况下永远不会为假;传递给函数的每一行都有一个长度。因此,该功能似乎没有用。
jQuery的.length
本身是一种更有效的计算适当行的方法:
var rowCount = $("#myTable tr:not(.discarded,.old)").length;
console.log(rowCount ? rowCount + ' rows found.' : 'There are no rows.');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<table id="myTable">
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr class="discarded"></tr>
<tr class="old"></tr>
</table>
注意:如果您要确定有多少行不为空,或者包含多个单元格,或者至少包含一个包含内容的单元格,或者其他更复杂的选择,则情况可能会不同。
>