我有以下代码:
var sum = 0;
$("#scLD > tbody > tr > td:nth-child(2)").each(function () {
var x = $(this);
if (x.parent().hasClass(/^onHandTdmm([0-9]+)$/)) {
var y = parseFloat(x.text(), 10) || 0;
sum += y;
}
if (x.parent().hasClass("onHandGrand")) {
x.html(sum);
sum = 0;
}
})
我正在尝试搜索列,如果父级(行)中的任何单元格包含某个类名,后跟任何单个数字来添加它。所以基本上如果父类包含onHandTdmm类,后跟任何数字(例如onHandTdmm1)。我提出的正则表达式(/ ^ onHandTdmm([0-9] +)$ /)只在函数中返回0。
答案 0 :(得分:1)
\(
而不是(
。
function TestCtrl() {
var tests = document.querySelectorAll('.test');
function hasClassHandTdmm(element) {
var re = /onHandTdmm\([0-9]+\)/
var parent = element.parentNode;
if(re.test(parent.className)) {
parent.classList.add('matches');
}
}
Array.prototype.forEach.call(tests, hasClassHandTdmm);
}
document
.addEventListener('DOMContentLoaded', TestCtrl);
;

.matches {
background: pink;
}

<div class="onHandTdmm(1) ">
<span class="test">TEST</span>
</div>
<div class="">
<span class="test">TEST 2</span>
</div>
&#13;
答案 1 :(得分:1)
不是循环遍历所有单元格并匹配具有该类的父级,为什么不仅找到具有该类的行,然后根据需要操作单元格呢?
对于正则表达式部分,您需要使用.test
,因为jQuery选择器本身不处理正则表达式。
使用JSFiddle:https://jsfiddle.net/j4d3zgqt/4/
var sum = 0;
$("#scLD > tbody > tr").each(function() {
var $row = $(this);
var $cell = $(this).find('td:nth-child(2)');
if (/^onHandTdmm([0-9]+)$/.test($row.attr("class"))) {
var y = parseFloat($cell.text(), 10) || 0;
sum += y;
}
if ($row.hasClass("onHandGrand")) {
$cell.html(sum);
sum = 0;
}
});
答案 2 :(得分:0)
我相信你可能会过度思考这项任务。根据我的理解,一个简单的indexOf命令应该为您提供类名的存在,然后您可以分别评估后面的整数。
答案 3 :(得分:-1)
有一件事就是尝试使用val()
代替text()
函数,并提供上述答案。