1

从以下字符串中,我需要动态变化的“6.903”数字来进行计算。

是否有一些正则表达式或一些 jQuery 技巧可以轻松或优雅地做到这一点?

<a href="javascript:void(0)" class="" id="buddyTrigger">
38.760&nbsp;<img border="0" align="absmiddle" alt="Arany" src="/img/symbols/res2.gif">
&nbsp;&nbsp;5&nbsp;<img border="0" align="absmiddle" alt="Pokolkristály" src="/img/symbols/res3.gif">
&nbsp;&nbsp;220&nbsp;<img border="0" align="absmiddle" alt="Szilánk" src="/img/symbols/res_splinters.png">
&nbsp;&nbsp;91&nbsp;/&nbsp;125&nbsp;<img border="0" align="absmiddle" alt="Akciópont" src="/img/symbols/ap.gif">
&nbsp;&nbsp;6.903&nbsp;/&nbsp;82.100&nbsp;<img border="0" align="absmiddle" alt="Életerő" src="/img/symbols/herz.png">
&nbsp;&nbsp;<img border="0" align="absmiddle" alt="Szint" src="/img/symbols/level.gif">&nbsp;41    &nbsp;&nbsp;
<img border="0" align="absmiddle" alt="Harci érték" src="/img/symbols/fightvalue.gif">&nbsp;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>
4

1 回答 1

2

使用 DOM 方法;.html()使用经常会破坏页面功能来替换东西。此外,该正则表达式可能会因最小的变化而中断。

您是在尝试获取生命值,对吗?并以 with<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);


这样做:

  1. 不会破坏页面上的任何事件监听器。
  2. 不太容易受到页面布局/内容变化的影响。
  3. 更容易理解和维护。
  4. 如果性能是一个因素,它将运行得更快。
于 2013-02-08T14:01:08.543 回答