2015-06-17 23 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; 
    } 
} 
相关问题