将类与表行匹配

时间:2016-12-14 20:06:04

标签: javascript jquery regex

我有以下代码:

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。

4 个答案:

答案 0 :(得分:1)

  1. 你需要逃避:\(而不是(
  2. 不要忘记一切,这项任务在vanillajs中更容易。
  3. 
    
    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;
    &#13;
    &#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()函数,并提供上述答案。