JQuery计数表行
JQuery count table rows
我知道计算文档中标签的数量可以通过以下方式完成
var tableCount = $('body table tr').length;
现在我假设这只计算标签的数量。我想知道的是,我有相同数量的结束标签。因此,如果上面的代码显示有72个标记,我现在想要一些东西告诉我有72个结束tr标记。
这可能吗?
谢谢
理想情况下,您应该使用这样的函数:
function checkTable(tableElement) {
// Get inner HTML
var html = tableElement.innerHTML;
// Count <tr>
var count1 = html.match(/<tr/g).length;
// Count </tr>
var count2 = html.match(/<'/tr/g).length;
// Equals?
return count1 === count2;
}
然而,由于浏览器的冗长的,不匹配的标签会自动更正(即自动关闭)。因此,运行中的页面不可能验证自身。这是一个概念证明:JS Bin.
解释:第二个表有一个错字(开始标记而不是结束标记),但是函数在两种情况下都返回true
。如果检查生成的HTML(可以通过DOM访问的HTML),可以看到浏览器自动纠正了不匹配的标签(有一个额外的空表行)。
幸运的是,还有另一种方法。要获得纯(即未被浏览器修改)HTML代码,您可以对当前页面URL发出AJAX请求。是的,你没看错,页面又自动加载了。但是不用担心,这里没有递归和可能的stackoverflow,因为您不处理获取的页面。
下面的JS代码是:var selfUrl = document.location.href;
function checkHTML(html) {
// Count <tr>
var count1 = html.match(/<tr/g).length;
console.log(count1);
// Count </tr>
var count2 = html.match(/<'/tr/g).length; // </tr (do not remove this comment!)
console.log(count2);
// Equals?
return count1 === count2;
}
$.get(selfUrl, function(html) {
console.log(checkHTML(html));
});
但是要注意一个陷阱。如果您在HTML中包含了这段代码(通常不鼓励),那么您就不能删除这条注释。原因如下:一个正则表达式包含<tr
,而另一个正则表达式转义了正斜杠,因此不包含</tr
。由于您获取了整个HTML代码(包括JS代码),因此计数是不匹配的。为了做到这一点,我在注释中添加了一个额外的</tr
你的问题让我想起了SAX解析器的概念,因为HTML代码显然是XML的一种。SAX Parser通常会查看开始和结束标记,以及元素属性和内容。
前段时间,我使用了来自:http://ejohn.org/blog/pure-javascript-html-parser/的简单SAX解析器库网址:http://ejohn.org/files/htmlparser.js
使用这个库,你可以做以下事情:
$(document).ready(function(){
var htmlString = $('#myTable').html(),
countStart = 0,
countEnd = 0;
HTMLParser(htmlString, {
start: function(tag, attrs, unary) {
countStart += 1; // you may add the if tag === 'tr' or else
console.log("start: " + tag);
},
end: function(tag) {
countEnd += 1; // you may add the if tag === 'tr' or else
console.log("end: " + tag);
},
chars: function(text) {},
comment: function(text) {}
});
});
也有现代的基于节点的方法,如:https://github.com/isaacs/sax-js/blob/master/examples/example.js,可以用于相同的任务。
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- JQuery使计数器每次更改时都会增加
- 如何在Angular2中使用jQuery插件
- 提高JQuery的性能
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JQuery合并了keyup和focusout两个函数
- 如何使用jQuery选择下拉列表的值
- 将PHP变量传递给jQuery时遇到问题
- jQuery UI自动完成突然停止工作
- 剑道网格jQuery动画()问题
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- jquery点击函数select&取消选择
- jquery试图按名称获取按钮位置