2017-07-13 35 views
0

因此,作为Web应用程序的一部分,我试图在标记中查找特定字符集,并根据需要将其替换为其他元素他们成为图标而不是纯文本)。使用JavaScript查找并替换“{any-integer}”的实例

$timeout(function() { 
       $('.collapsible').collapsible(); 


       $(".manaCost:contains('{B}')").html(function (_, html) { 
        return html.replace(/{B}/g, "<i class=\"ms ms-b\"></i>"); 
       }); 

       $(".manaCost:contains('{R}')").html(function (_, html) { 
        return html.replace(/{R}/g, "<i class=\"ms ms-r\"></i>"); 
       }); 

       $(".manaCost:contains('{W}')").html(function (_, html) { 
        return html.replace(/{W}/g, "<i class=\"ms ms-w\"></i>"); 
       }); 

       $(".manaCost:contains('{G}')").html(function (_, html) { 
        return html.replace(/{G}/g, "<i class=\"ms ms-g\"></i>"); 
       }); 

       $(".manaCost:contains('{U}')").html(function (_, html) { 
        return html.replace(/{U}/g, "<i class=\"ms ms-u\"></i>"); 
       }); 

       $(".manaCost:contains('{ANY-INTEGER BETWEEN BRACES}')").html(function (_, html) { 
        return html.replace(/{ANY-INTEGER BETWEEN BRACES}/g, "<i class=\"ms ms-SAME-INTEGER\"></i>"); 
       }); 

}, 0); 

所有与他们的内部信件的那些(例如,“{B}”}工作得很好,但整一个是有点复杂,我需要找到一个整数的任何实例括号内,但随后还需要相同的整数适用于类替换元素中。任何人都知道我会怎样呢?

+2

呃,'/ \ {(\ d)\}/g'? – adeneo

+0

或者,如果要查找特定的整数值:'/ \ {1 \}/g',则需要转义大括号。一次*选择'.manaCost'元素也可能会改变你的逻辑,然后对它们全部进行替换。这听起来很奇怪,但是DOM访问比正则表达式慢得多,它可能会比当前模式快得多 –

+0

阅读有关正则表达式的内容,它会对您有所帮助。 – onetwo12

回答

0

/\{(\d)\}/g东西将捕获的整数,所以你可以用$1

得到它

$("#test").html(function (_, html) { 
 
\t return html.replace(/\{(\d)\}/g, "<i class=\"s$1\">$1</i>"); 
 
});
.s2 {color: red} 
 
.s3 {color: blue}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="test"> 
 
    test {2} {3} something 
 
</div>

正如罗里提到的,你应该考虑做一次全部替换,而且也真的没有必要检查是否每一个元素包含你要找什么,只是做

$(".manaCost").html(function(_, html) { 
    return html.replace(/\{B\}/g, "<i class=\"ms ms-b\"></i>") 
      .replace(/\{R\}/g, "<i class=\"ms ms-r\"></i>") 
      .replace(/\{W\}/g, "<i class=\"ms ms-w\"></i>") 
      .... etc 
});  
+0

干杯是这样做的。不知道通过$ 1访问价值等,所以谢谢你告诉我。 – ChoiceKarpz

+0

另外耶,我已经调整过,所以它一次完成所有的替换 – ChoiceKarpz