2016-12-14 27 views
1

我有以下代碼:匹配類

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

不確定你可以在hasClass()方法中使用正則表達式嗎?但是:http://stackoverflow.com/questions/13878759/jquery-match-part-of-class-with-hasclass – sinisake

+0

你有沒有一個數字後面的'onHandTdmm'開始的類?你可以使用選擇器'[class * = onHandTdmm]'在類中的任何位置查找該字符串。 – Barmar

回答

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; 
    } 
}); 
0

我相信你可能會推翻這項任務。根據我的理解,一個簡單的indexOf命令應該給你類名的存在,然後你可以分別計算後面的整數。

1
  1. 您需要轉義:\(而不是(
  2. 不要急於求成,這個任務在vanillajs中更容易。

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>

+0

類名中沒有'()',它只是'onHandTdmm1'。 – Barmar

-1

有一件事是剛剛嘗試使用val()代替text()功能與上面提供的答案。

+0

這與在'.hasClass()'中使用正則表達式的問題有什麼關係? – Barmar

+0

您不能在'​​'上使用'.val()'。 – Santi