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()ページの機能が壊れることがよくあります。また、その正規表現は、わずかな変更で壊れる可能性があります。

あなたはライフ値を取得しようとしていますよね?<img>そして、それはwithで終わり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 に答える