如何统计指定类名下TD含特定值的TR元素数量?
统计符合条件的表格行(TR)数量
没问题,我来帮你搞定这个统计需求!下面分原生JavaScript和jQuery两种常用方案给你演示,以你提供的表格示例为例,比如我们要统计class="c2"且其下TD元素包含文本Animal的TR行数:
方案一:原生JavaScript
不需要依赖任何库,直接用浏览器自带的API实现:
// 定义目标类名和要匹配的文本 const targetClass = 'c2'; const targetText = 'Animal'; // 获取所有带有目标类名的TR元素 const targetRows = document.querySelectorAll(`tr.${targetClass}`); // 初始化计数器 let matchCount = 0; // 遍历每一行,检查是否包含目标文本的TD targetRows.forEach(row => { // 将当前行的TD转换为数组,检查是否有匹配的文本 const hasMatch = Array.from(row.querySelectorAll('td')).some(td => { // 用trim()去除首尾空格,避免空格干扰匹配 return td.textContent.trim() === targetText; }); if (hasMatch) { matchCount++; } }); console.log(`符合条件的行数:${matchCount}`); // 示例中会输出1
如果需要不区分大小写的匹配,只需要把文本都转成小写再比较:
const hasMatch = Array.from(row.querySelectorAll('td')).some(td => { return td.textContent.trim().toLowerCase() === targetText.toLowerCase(); });
方案二:jQuery(更简洁)
如果你的项目已经引入了jQuery,代码会更简洁:
const targetClass = 'c2'; const targetText = 'Animal'; // 直接筛选符合条件的行,获取长度就是数量 const matchCount = $(`tr.${targetClass}:has(td:contains('${targetText}'))`).length; console.log(`符合条件的行数:${matchCount}`); // 示例中输出1
注意:jQuery的:contains()是大小写敏感的
如果需要不区分大小写,可以扩展一个自定义选择器:
// 扩展不区分大小写的contains选择器 $.expr[":"].containsIgnoreCase = function(element, index, match) { return $(element).text().toLowerCase().indexOf(match[3].toLowerCase()) !== -1; }; // 使用自定义选择器统计 const matchCount = $(`tr.${targetClass}:has(td:containsIgnoreCase('${targetText}'))`).length;
内容的提问来源于stack exchange,提问作者Satya
相关产品推荐
相关产品推荐

