2011-12-06 12 views
0

私はHTML文字列内のテキストをJavascriptで置き換えようとしています。私はhtml_str.replace("hi","hello");を行った後、私は交換したい、この例ではjavascript - 属性間のテキストを置換しない

var html_str = '<div>hi blah blah<img src="img.jpg" alt="say hi" /><a href="link_hi.php">hi!</a></div>'; 

: トリッキーな部分は、それがタグ内にない場合にのみ、私は、テキストを交換する必要があるということです(これは属性の一部ではないという意味) <img alt=".."またはhref="...を避けて、divaのタグ内のテキストのみ。

いくつかの詳細情報:

  1. html_str = document.body.innerHTML;、そのための要素は不明です。上記の例はほんの一例です。
  2. 正規表現は大歓迎です。
  3. hihello値が置き換えられ、実際の意味、内部varaiblesあるので、のようなものです:私はよく自分自身を説明願ってい

    var html_str = document.body.innerHTML; 
    var replaced_txt = "hi"; 
    var replace_with = "hello"; 
    var replaced_html = html_str.replace(replaced_txt,replace_with); 
    

    :REALコードはこれですhtml_str.replace(var1,var2);

。 ありがとうございます。

答えて

3

これ多分?

var obj = {'hi':'hello','o':'*','e':'3','ht':'HT','javascrpit':'js','ask':'ASK','welcome':'what\'s up'}; // This may contain a lot more data 

(function helper(parent, replacements) { 
    [].slice.call(parent.childNodes, 0).forEach(function (child) { 
    if (child.nodeType == Node.TEXT_NODE) { 
     for (var from in replacements) { 
     child.nodeValue = child.nodeValue.replace(from, replacements[from]); 
     } 
    } 
    else { 
     helper(child, replacements); 
    } 
    }); 
}(document.body, obj)); 

http://jsfiddle.net/G8fYq/4/が直接をdocument.body使用しています)

あなたは変更が見えるようにしたい場合は、すぐに、あなたもdocument.bodyを渡し、全体containerものについて忘れることができます。

複数の置換を1回実行できるようにするための更新。次のソリューションは、IEで動作しないでしょうが


また、JavaScriptでのXPathを試みることができます。

(?![^<>]*>) 

はちょうどあなたのマッチパターンに追加し、それがタグの属性として任意のコンテンツを除外します:

var 
    replacements = {'hi':'hello','o':'*','e':'3','ht':'HT','javascrpit':'js','ask':'ASK','welcome':'what\'s up'}, 
    elements = document.evaluate('//text()', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null), 
    i = 0, 
    textNode, from; 

for (; i < elements.snapshotLength; i += 1) { 
    textNode = elements.snapshotItem(i); 

    for (from in replacements) { 
    if (replacements.hasOwnProperty(from)) { 
     textNode.nodeValue = textNode.nodeValue.replace(from, replacements[from]); 
    } 
    } 
} 
+0

私の場合に役立たなかった。しかし、ありがとう... – Phoenix

+0

@Phoenix好奇心から、どうしてですか? – Yoshi

+0

それはうまく動作しませんでした。実際には、私はこのソリューションがうまくいくことを願っていました。私は、タグに「ダメージ」を与えずにHTMLテキストを変更する必要があり、これは正規表現でよく起こります。 – Phoenix

-1

あなたはこれを試すことができますが、正規表現とHTMLは友人ではありません。

var str = '<div>hi blah blah<img src="img.jpg" alt="say hi" /><a href="link_hi.php">hi!</a></div>', 
    rx = new RegExp('(\>[^\>]*)' + 'hi' + '([^\>=]*\<)', 'g'); 

str = str.replace(rx, '$1hello$2'); 
+0

ありがとうございます。私は '>'の前に '\'を削除する必要があったが、私のためにうまくいった。 – Phoenix

関連する問題