1

Web ページ内のテキストのみを置き換えたいのですが、document.body.innerHTML を介して置き換えると、次のようにスタックする可能性があります。

HTML:

<p>test test </p>
<p>test2 test2</p>
<p>test3 test3</p>

J:

var param = "test test test2 test2 test3";
var text = document.body.innerHTML;
document.body.innerHTML = text.replace(param, '*' + param + '*');

私は取得したい:

*test test
test2 test2
test3* test3

「望ましい」結果の HTML:

<p>*test test </p>
<p>test2 test2</p>
<p>test3* test3</p>

したがって、上記のパラメーター ("test test test2 test2 test3") を使用してそれを実行したい場合、これは<p></p>考慮されず、else セクションになります。

その間にある可能性のあるhtmlマークアップを「考慮」せずにテキストを置き換えるにはどうすればよいですか?

前もって感謝します。

編集(@Sonesh Dabhi用):

基本的に、Web ページのテキストを置き換える必要がありますが、html を含む Web ページをスキャンすると、置き換えが機能しません。テキストのみに基づいてスキャンして置き換える必要があります。

編集 2:
'Raw' JavaScript Please (jQuery なし)

4

3 に答える 3

1

これはあなたが望むことを行い、タグ間のテキストを見つけてそこに置き換える正規表現を構築します。試してみます。

http://jsfiddle.net/WZYG9/5/

魔法は

(\s*(?:<\/?\w+>)*\s*)*

以下のコードでは、文字列内でエスケープするために二重のバックスラッシュがあります。正規表現自体は、任意の数の空白文字 (\s) を探します。内側のグループ (?:</?\w+>)* は、任意の数の開始タグまたは終了タグに一致します。?: 置換文字列内のグループをカウントせず、見つかった一致を記憶しないように Java スクリプトに指示します。< はリテラルの小なり文字です。スラッシュ (終了 HTML タグを開始する) はエスケープする必要があり、疑問符は 0 または 1 回の出現を意味します。これには、任意の数の空白文字が続きます。

「検索するテキスト」内のすべてのスペースはこの正規表現に置き換えられ、テキスト内の単語間の任意の量の空白とタグに一致し、それらを番号付き変数 $1、$2 などで記憶できます。置換文字列それらの記憶された変数を元に戻すために構築されます。

これは、任意の数のタグとそれらの間の空白に一致します。

function wrapTextIn(text, character) {
            if (!character) character = "*"; // default to asterik
            // trim the text
            text = text.replace(/(^\s+)|(\s+$)/g, "");
            //split into words
            var words = text.split(" ");
            // return if there are no words
            if (words.length == 0)
                return;
                // build the regex
            var regex = new RegExp(text.replace(/\s+/g, "(\\s*(?:<\\/?\\w+>)*\\s*)*"), "g");
            //start with wrapping character
            var replace = character;
            //for each word, put it and the matching "tags" in the replacement string
            for (var i = 0; i < words.length; i++) {
                replace += words[i];
                if (i != words.length - 1 & words.length > 1)
                    replace += "$" + (i + 1);
            }
            // end with the wrapping character
            replace += character;
            // replace the html
            document.body.innerHTML = document.body.innerHTML.replace(regex, replace);
        }
于 2012-08-24T00:21:53.980 に答える
0

ワーキングデモ

USE THAT FUNCTION TO GET TEXT.. no jquery required
于 2012-08-22T21:24:55.807 に答える
0
  1. まずタグを削除します。つまり、document.body.textContent / document.body.innerTextを試すか、この例を使用できますvar StrippedString = OriginalString.replace(/(<([^>] +)>)/ ig、 "");
  2. 検索して置換します(すべてを置換するには、検索後にさらに1つ「/ g」を追加します)

String.prototype.trim = function(){return this.replace(/ ^ \ s \ s * /、'').replace(/ \ s \ s * $ /、'');};

var param = "test test test2 test2 test3";

var text =(document.body.textContent || document.body.innerText).trim();

var replace = text.search(param)> = 0;

if(置換){

  var re = new RegExp(param, 'g');

  document.body.innerHTML = text.replace(re , '*' + param + '*');

} そうしないと {

//paramは置き換えられませんでした

//ここで何をしますか?

}

ここを参照して ください注:ストライピングを使用すると、タグが失われます。

于 2012-08-22T21:25:20.383 に答える