2011-01-19 4 views
1

javascript 및 jquery를 사용하여 페이지의 각 컨트롤의 각 텍스트 내용을 다시 대체하려고합니다.각 HTML 컨트롤의 내용 바꾸기 javascript jquery

모든 텍스트 내용을 수정하고 (단, 텍스트 만 수정하지 않고) 단어를 검색하고 다른 단어로 바꿔야합니다.

한 시도는 다음과 같습니다

jQuery.fn.replaceEachOne = function (objective, rep) { 
    this.each(function(){ 
       //$(this).html($(this).html().replace(new RegExp('(\\s'+objective+'\\s(?![[\\w\\s?&.\\/;#~%"=-]*>]))', "ig"), rep)); 
    $(this).html($(this).html().replace(new RegExp('('+objective+'(?![[\\w\\s?&.\\/;#~%"=-]*>]))', "ig"), rep)); 
      } 
     ); 
} 

도와주세요! 이 같은

답변

1

뭔가 트릭을 수행해야합니다

$.fn.replaceEachOne = function(search, replace) { 
    this.contents().each(function(){ 
     if (this.nodeType == Node.ELEMENT_NODE) { 
      $(this).replaceEachOne(search, replace); 
     } else if (this.nodeType == Node.TEXT_NODE) { 
      this.nodeValue = this.nodeValue.replace(search, replace); 
     } 
    }); 
}; 

이 텍스트에 대한 교체가 아니라 전체 요소의 HTML을 수정하는 것보다, 직접 노드한다. 대/소문자를 구분합니다. 대/소문자를 구분하지 않고 검색하려면 정규식을 사용하려면 replace으로 호출을 변경해야합니다.

+0

그게 작업,하지만 난 내 말의 finded 텍스트에 새 컨트롤을 추가해야합니다 추가 : <라벨 색상 = "..."> Finded 텍스트 및 경우 그렇게하면 브라우저가 텍스트로만 제어 할 수 없다는 것을 의미합니다. 텍스트로 보입니다. 다른 색상의 쿨 레이블이 아닙니다. :( 도와주세요 – Caipivara

+0

@Daniel GR [강조 플러그인] (http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html)처럼 들리십시오. – lonesomeday

0

I는 다음과 같이하여 시작합니다 :

jQuery.fn.replaceEachOne = function(objective, rep) { 
    var html = jQuery(this).html(); 
    var simpleRegexp = new RegExp(objective, "gi"); 
    var regexp = new RegExp(">[^><]*?"+objective+"[^><]*?<","gi"); 
    html = html.replace(regexp, function(match) { 
     return match.replace(simpleRegexp, rep); 
    }); 
    jQuery(this).html(html); 
} 

그 코드는 '>''<' 문자 beetween 몸 HTML 코드에 일치하는 텍스트를 발견하고 일치하는 텍스트를 대체합니다.

물론 이것은 간단한 솔루션이며 <script> 또는 <style> 블록에서도 텍스트를 대체합니다. 내 생각에 시작하는 것이 좋은 생각입니다.

+0

하지만 문제는 내가 콘텐츠를 여기에 추가 할 필요가 없다는 것입니다.>> – Caipivara

+0

"beetween '>'및 '<' '이 (가)"<' and '>' "이 아닌"작성했습니다. 순서가 중요합니다. –

+0

흠 그게 사실) – Caipivara

0
마지막으로

...

jQuery.fn.replaceEachOne = function (objective, reposition) { 
    this.contents().each(function(){ 
     if (this.nodeType == Node.ELEMENT_NODE) { 
      $(this).replaceEachOne(objective, reposition); 
     } else if (this.nodeType == Node.TEXT_NODE) { 
      var label = document.createElement("label"); 
      label.innerHTML = this.nodeValue.replace(objective, reposition); 
      this.parentNode.insertBefore(label, this); 
      this.parentNode.removeChild(this); 
     } 
    }); 
}