2015-06-17 49 views
2

我一直在使用這個代碼檢測表中包含一個分號元素,然後更改背景顏色:使用innerHTML來檢測一個字符出現的次數?

var x = document.getElementsByTagName("TD"); 
var i=0; 
for (i=0;i<x.length;i++) { 
    if (x[i].className=="ms-vb-title") { 
     if (x[i].innerHTML.indexOf(";") != -1) { 
      x[i].style.cssText="background-color:#ccc !important;"; 
     } 
    } 
} 

但我現在想基於分號的出現的次數來改變顏色,例如小於2會突出顯示紅色,在2-4之間會突出顯示橙色,而超過4會突出顯示綠色......可以通過修改現有代碼來實現嗎?

回答

4

您可以使用match知道OCCURENCES數量:

('str1;str2;str3;str4'.match(/;/g) || []).length; 

|| []這是爲什麼當沒有任何元素,所以它給一個空陣列(因爲match返回null

+0

去與這個,偉大的工作,謝謝您! – David

5

您可以使用.split生成一個字符數組長度的字符數量的分裂(在你的情況下;)。

var a = ';;;;testtest;test;test;te;;st;;test;test;;'; 
var b = a.split(';'); 
var numOfSemicolons = b.length; 
0

第一步:找到分號 的出現次數的數量第二步:添加基於計數的顏色,即少於2 occurence然後紅色等。

更簡單的方法,但最昂貴的方法 迭代的內容和獲得計數,然後再重複它添加顏色

2

試試這個

var x = document.getElementsByTagName("TD"); 
var i = 0; 
for (i = 0; i < x.length; i++) { 
    if (x[i].className == "ms-vb-title") { 
     var count = (x[i].innerHTML.match(/;/g) || []).length; 
     if(count < 2) { 
      x[i].style.cssText = "background-color:red !important;"; 
     } 
     else if(count < 4) { 
      x[i].style.cssText = "background-color:orange !important;"; 
     } 
     else if(count >= 4) { 
      x[i].style.cssText = "background-color:green !important;"; 
     } 
     else 

    } 
} 
+0

「var count =」後面還有一個額外的開口支架,但這種方式很好! :) – David

+0

謝謝戴夫,我的錯誤。我糾正了這一點 –

0

假設elems的是包含您的預扣稅,您可以通過getElementeBy<x>或類似東西得到一個數組,這可能會做你想要完成的任務:

for(var i = 0; i < elems.length; i++){ 
count = elems[i].innerHTML.split(';') - 1 ; 
switch(count){ 
    case 0: 
    case 1: 
    case 2: 
     elems[i].style.cssText="background-color:#C00 !important;"; 
    break; 

    case 3: 
    case 4: 
    elems[i].style.cssText="background-color:#F60 !important;"; 
    break; 

    default: 
    elems[i].style.cssText="background-color:#0C0 !important;"; 
    break; 
    } 
} 
相關問題