2011-10-14 5 views
3

여기 내 코드입니다 :자바 스크립트 대체() 함수를 사용하여 여러 단어를 대체하는 방법?

  var keys = keyword.split(' '); 
     //alert(keys); 
     for(var i=0; i<keys.length; i++) 
      { 
      var re = new RegExp(keys[i], "gi"); 
      var NewString = oldvar.replace(re, '<span style="background-color:#FFFF00">'+keys[i]+'</span>'); 
      document.getElementById("wordlist").innerHTML=NewString; 
      alert(keys[i]); 
      } 

하지만 여기에 문자열을 넣으면 "a b"; 두 개의 문자 "a"와 "b" 로 나뉘며이 대체 함수는 "a"를 대체하지만 "b"를 얻으면 "b"만 덮어 쓰게됩니다. 하지만 "a"와 "b"를 모두 강조하고 싶습니다. 이 문제를 해결하는 방법 ? 다른 문제가 있습니다. 바꾸거나 강조하면 HTML 태그의 "a"와 "b"를 모두 바꿉니다. 그래서, 그 HTML 태그를 대체하는 것을 방지하는 방법. 또한 전체 텍스트를 표시 할 때 모든 HTML 태그

이 필요합니다.

답변

2

당신은 실제로 하나의 정규식은 다음과 같이 대체 할 수 :

var re = new RegExp(keys.join("|"), "gi"); 
oldvar = oldvar.replace(re, replacer);   
document.getElementById("wordlist").innerHTML = oldvar; 

function replacer(str) 
{ 
    return '<span style="background-color:#FFFF00">' + str + '</span>'; 
} 

예 - http://jsfiddle.net/zEXrq/1/

무엇 모든 단어를 일치합니다 |로 구분 하나의 정규식에 모든 키를 병합되어하고있다 그 다음 매치에서 replacer 함수를 실행합니다.

예 2-http://jsfiddle.net/zEXrq/2/

+0

이 키가 동적이면이 코드가 작동하지 않습니다. 여전히 HTML 태그를 대체합니다. html 태그를 바꾸지 못하게하고 싶습니다. 이 문제를 해결하는 데 도움주세요. – Moumita

+0

@Moumita 무슨 뜻인지 모르겠다. 다른 값을 함수에 전달할 수있는 또 다른 예를 추가했다. 필요한 것을 수행 할 수 있는가? –

+0

나는 이것을했다 : http://jsfiddle.net/zEXrq/3/ 여기 나의 끈에는 약간 html 내용이있다. 나는이 html 콘텐츠로 그것을보고 싶습니다. 뿐만 아니라 그 텍스트를 html 태그로 바꾸고 싶습니다. 내가해야 할 일? – Moumita

2
var keys = keyword.split(' '); 
    //alert(keys); 
    for(var i=0; i<keys.length; i++) 
     { 
     var re = new RegExp(keys[i], "gi"); 
     oldvar = oldvar.replace(re, '<span style="background-color:#FFFF00">'+keys[i]+'</span>'); 
     document.getElementById("wordlist").innerHTML=oldvar; 
     alert(keys[i]); 
     } 

편집이 필요합니다 항상에만 마지막 applyied되는 대체 루프를 durring oldvar이 변경되지 않도록 분명한 것 같다. 모든 단어를 바꾸려면 "oldvar"를 변경해야합니다.

+0

모든 단어가 hilight가 아닙니다. – Moumita

+0

이것이 어떻게 문제를 해결하는지 모르겠습니다. 어둠 속에서 찔러보고 싶니? 적어도 코드에 대한 의견을 게시해야합니다. –

1

동일한 var에 대한 작업을 수행해야합니다. 루프 외부에서 oldvar를 가져 오지만 변경된 내용을 oldvar로 가져 오지 마십시오. 따라서 마지막 반복 (내용 만)이 내용을 대체합니다.

0

당신은 각 반복에서 (이 코드에서 선언되지 않은) 변수 oldvarreplace를 호출하고, 따라서 같은 지점에서 시작하고 - 비 강조 문자열 -마다. 모든 코드를 보지 못한 채로 var NewString =oldvar =.innerHTML=NewString으로 바꾸는 것이 .innerHTML=oldvar으로 바꾸는 것이 문제를 해결할 것입니다.

관련 문제