1

我想替换网页中的一些文本,只有文本,但是当我通过 document.body.innerHTML 替换时,我可能会卡住,如下所示:

HTML:

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

JS:

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):

基本上我需要替换网页中的文本,但是当我扫描带有 html 的网页时,替换不起作用,我需要仅基于文本进行扫描和替换

编辑 2:
'Raw' JavaScript Please (no 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 = "测试测试 test2 test2 test3";

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

var 替换 = text.search(param) >= 0;

如果(替换){

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

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

} 别的 {

//参数没有被替换

//在这里做什么?

}

请参见此处 注意:使用条带化将丢失标签。

于 2012-08-22T21:25:20.383 回答