jQuery替换html页面中所有出现的字符串

Posted

技术标签:

【中文标题】jQuery替换html页面中所有出现的字符串【英文标题】:jQuery replace all occurrences of a string in an html page 【发布时间】:2014-09-26 08:55:10 【问题描述】:

我正在做一个项目,我需要用另一个字符串替换所有出现的字符串。但是,如果它是文本,我只想替换字符串。比如我想转这个……

<div id="container">
  <h1>Hi</h1>
  <h2 class="Hi">Test</h2>
  Hi
</div>

进入...

<div id="container">
  <h1>Hello</h1>
  <h2 class="Hi">Test</h2>
  Hello
</div>

在那个例子中,所有的“Hi”都变成了“Hello”,除了“Hi”作为 h2 类。 我试过了……

$("#container").html( $("#container").html().replace( /Hi/g, "Hello" ) )

...但这也替换了 html 中所有出现的“Hi”

【问题讨论】:

试试吧!这个问题会让你开始:***.com/questions/9178174/find-all-text-nodes 【参考方案1】:

这个:

$("#container").contents().each(function () 
    if (this.nodeType === 3) this.nodeValue = $.trim($(this).text()).replace(/Hi/g, "Hello")
    if (this.nodeType === 1) $(this).html( $(this).html().replace(/Hi/g, "Hello") )
)

产生这个:

<div id="container">
    <h1>Hello</h1>
    <h2 class="Hi">Test</h2>
    Hello
</div>

jsFiddle example

【讨论】:

如果有嵌套的 HTML 标签,这不起作用,例如&lt;h2 class="Hi"&gt;Test &lt;span class="Hi"&gt;&lt;/span&gt;&lt;/h2&gt;【参考方案2】:

很好的结果:

function str_replace_all(string, str_find, str_replace)
try
    return string.replace( new RegExp(str_find, "gi"), str_replace ) ;      
 catch(ex)return string;

而且更容易记住...

【讨论】:

【参考方案3】:
 replacedstr = str.replace(/needtoreplace/gi, 'replacewith');

needtoreplace 不应该被' 舍入

【讨论】:

【参考方案4】:
//Get all text nodes in a given container
//Source: http://***.com/a/4399718/560114
function getTextNodesIn(node, includeWhitespaceNodes) 
    var textNodes = [], nonWhitespaceMatcher = /\S/;

    function getTextNodes(node) 
        if (node.nodeType == 3) 
            if (includeWhitespaceNodes || nonWhitespaceMatcher.test(node.nodeValue)) 
                textNodes.push(node);
            
         else 
            for (var i = 0, len = node.childNodes.length; i < len; ++i) 
                getTextNodes(node.childNodes[i]);
            
        
    

    getTextNodes(node);
    return textNodes;


var textNodes = getTextNodesIn( $("#container")[0], false );
var i = textNodes.length;
var node;
while (i--) 
    node = textNodes[i];
    node.textContent = node.textContent.replace(/Hi/g, "Hello");

请注意,这也将匹配“Hi”只是单词一部分的单词,例如“爬坡道”。要仅匹配整个单词,请使用/\bHi\b/g

【讨论】:

这是迄今为止我看到的最被低估的答案之一。即使在整个 &lt;body&gt; 上运行,它也非常有效【参考方案5】:

给你 => http://jsfiddle.net/c3w6X/1/

var children='';

$('#container').children().each(function()
    $(this).html($(this).html().replace(/Hi/g,"Hello")); //change the text of the children

    children=children+$(this)[0].outerHTML; //copy the changed child
);
var theText=$('#container').clone().children().remove().end().text(); //get the text outside of the child in the root of the element

$('#container').html(''); //empty the container

$('#container').append(children+theText.replace(/Hi/g,"Hello")); //add the changed text of the root and the changed children to the already emptied element 

【讨论】:

如果有嵌套的 HTML 标签,这不起作用,例如&lt;h2 class="Hi"&gt;Test &lt;span class="Hi"&gt;&lt;/span&gt;&lt;/h2&gt; 在这个特定的例子中,但我认为 OP 要求的是一个通用的解决方案。该示例可能是他真实 HTML 的精简版。 @MattBrowne 你是对的,但 j08691 的回答确实如此 不,实际上并没有……我会在那里发表同样的评论。

以上是关于jQuery替换html页面中所有出现的字符串的主要内容,如果未能解决你的问题,请参考以下文章

jQuery-替换和删除元素

如何用jQuery选择和替换整个页面

替换jquery中字符串中多次出现的多个子字符串

[ jquery 文档处理 replaceWith(content|fn) replaceAll(content) ] 此方法用于把所有匹配的元素替换成指定的HTML或DOM元素

替换数据库文本字段中所有出现的子字符串

django中模板页面如何实现字符串匹配替换 解决后提高悬赏