2011-01-19 12 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

私はこのようなもので開始します:

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 '>」と「<」」と書かれました。「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); 
     } 
    }); 
} 
関連する問題