2013-02-08 2 views
1

다음 문자열에서 계산을 위해 동적으로 변경되는 "6.903"숫자가 필요합니다.HTML 노드 사이에서 특정 텍스트를 추출하는 우아한 방법?

쉽게 또는 우아하게 할 수있는 정규식 또는 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> 

내 코드는 어떻게 든 단순화 할 수 있습니다, 같은 lenghty 솔루션입니다?

<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> 

답변

2

DOM 방법을 사용하십시오. .html()을 사용하여 대체하면 페이지 기능이 중단되는 경우가 있습니다. 또한, 그 정규식은 가장 작은 변화로 부서지기 쉽습니다.

생명을 구하는 중입니다. 값이 맞습니까? 그리고 은 alt="Életero"으로 끝납니다.

var lifeValTxtNd = $("#buddyTrigger img[alt='Életero']")[0].previousSibling; 


그리고 이것은 6.903/82.100 같은 내용의 6903을 가져옵니다 :

은 그래서 텍스트 노드 (질문 코드를 기반으로)입니다

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. 성능이 중요한 요소 일 경우 더 빠르게 실행됩니다.
+0

지금 형제가 무엇인지 알아 주셔서 감사합니다. – eapo

+0

안녕하세요. 기꺼이 도와주세요. –

관련 문제