从下面的字符串中,我需要动态更改的“ 6.903”数字来进行计算。
是否有一些正则表达式或一些jQuery技巧可以轻松或优雅地做到这一点?
<a href="javascript:void(0)" class="" id="buddyTrigger">
38.760 <img border="0" align="absmiddle" alt="Arany" src="/img/symbols/res2.gif">
5 <img border="0" align="absmiddle" alt="Pokolkristály" src="/img/symbols/res3.gif">
220 <img border="0" align="absmiddle" alt="Szilánk" src="/img/symbols/res_splinters.png">
91 / 125 <img border="0" align="absmiddle" alt="Akciópont" src="/img/symbols/ap.gif">
6.903 / 82.100 <img border="0" align="absmiddle" alt="Életerő" src="/img/symbols/herz.png">
<img border="0" align="absmiddle" alt="Szint" src="/img/symbols/level.gif"> 41
<img border="0" align="absmiddle" alt="Harci érték" src="/img/symbols/fightvalue.gif"> 878</a>
这是我的宽松解决方案代码,我可以简化一下吗?
<script type="text/javascript">
var dataIn=$('#infobar div.gold').html();
var dataPrep2Split=dataIn.replace(/<img(.*)>/g,';');
var dataSplit=dataPrep2Split.split(';');
var myData2Int=parseInt(dataSplit[18].replace('.',''));
if(myData2Int<=10000) {
$('#player').find('button.btn').remove();
var putBack=dataIn.replace(dataSplit[18],'<span class="newmessage">'+dataSplit[18]+'</span>');
$('#infobar div.gold').html(putBack);
}
</script>
最佳答案
使用DOM方法;使用.html()
替换内容通常会破坏页面功能。同样,该正则表达式可能会以最小的更改被破坏。
您正在尝试抓住人生价值吗?并以<img>
和alt="Életero"
结尾。
因此该文本节点为(基于Q代码):
var lifeValTxtNd = $("#buddyTrigger img[alt='Életero']")[0].previousSibling;
这从
6903
之类的内容中获取6.903 / 82.100
:var lifeVal = $.trim (lifeValTxtNd.nodeValue)
.replace (/^\s*(\d*)\.?(\d+)\s*\/.+$/, "$1$2")
;
lifeVal = parseInt (lifeVal, 10);
然后将该部分包装成跨度,请使用:
$("#buddyTrigger img[alt='Életero']").before (
'<span class="newmessage">' + lifeValTxtNd.nodeValue + '</span>'
);
lifeValTxtNd.parentNode.removeChild (lifeValTxtNd);
这样做:
不会中断页面上的任何事件侦听器。
不太容易受到页面布局/内容更改的影响。
更容易理解和维护。
如果性能是一个因素,它将运行得更快。