javascript - 为什么我在使用 jQuery 和 JavaScript 时得到不同的结果
问题描述
这是我的html代码
<table id="example" class="display" style="width:100%">
<tbody>
<tr class="data">
<td>1</td>
</tr>
<tr class="data">
<td>2</td>
</tr>
<tr class="data">
<td>3</td>
</tr>
<tr class="data">
<td>4</td>
</tr>
<tr class="data">
<td>5</td>
</tr>
<tr class="data">
<td>6</td>
</tr>
<tr class="data">
<td>7</td>
</tr>
</tbody>
</table>
我使用带有 jQuery 脚本的 jQuery 数据表
$('#example').DataTable({
"lengthMenu": [[5, 25, 50, -1], [5, 25, 50, "All"]],
"columnDefs": [
{ type: "num", targets: 0 },
]
});
而且我不明白为什么我在下面使用此代码显示2个不同的结果
list= document.getElementsByClassName("data");
console.log(list.length); // 7
$('button').on('click', function() {
console.log(list.length); //5
});
感谢帮助。
解决方案
你的第一个console.log(list.length);
会在之前执行$('#example').DataTable
,它会返回7
,因为有7
带有 class 的行data
。
那是因为一旦你应用$('#example').DataTable
它只会渲染(显示)5 rows
,所以当你使用list.length
它时会返回5
。
仅供参考-编写时Document.getElementsByClassName()
不会cache
导致list
对象list = document.getElementsByClassName("data");
。这意味着当你list.length
在里面使用时click
它会执行document.getElementsByClassName("data").length
。每次使用list
它都会一次又一次地扫描整个文档。
参考 - Document.getElementsByClassName()
警告:这是一个实时的HTMLCollection。DOM 中的更改将在更改发生时反映在数组中。如果此数组选择的元素不再符合选择器的条件,它将自动被删除。出于迭代目的,请注意这一点。
推荐阅读
- javascript - localStorage 似乎在 Angular 中不起作用
- laravel - 电子邮件不断从示例发送
- c++ - 后增量运算符如何与用户定义的类型一起使用?
- swift - UIButtons setAttributedTitle 在 UIButton 扩展中调用 layoutSubviews 后消失
- python-3.x - 在python中连接多个字典
- android - 操作栏从列表视图android中吃掉一部分
- java - 如何修复 NoSuchElementException
- javascript - 如何使用 node.js 或 express 在控制台中显示文件夹中所有文件的内容
- javascript - 如何在 Javascript 中为每个列表项分配一个顺序 ID?(顺便说一下,在一个 html 文档中)
- json - 如何确定 Webhook 未触发 Azure Function App 的原因