jQuery替换挂起chrome

jQuery replace hangs chrome

本文关键字:chrome 挂起 替换 jQuery      更新时间:2023-10-29

为什么这个脚本会冻结Chrome?还有,有没有更好的方法来做我想做的事情(用另一个词替换一个词的所有实例)?

<html>
  <body>      
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
      <script>
    $(document).ready(function(){   
    var replaced = $("body").html().replace('Foo','Bar');
    $("body").html(replaced);
    });
      </script>
      <p>Foo</p>
    </body>
</html> 

因为执行替换的脚本在主体中。当调用.html(HTMLString)并且HTMLString包含<script>时,jQuery将执行该脚本。因此,在替换主体之后,您将再次调用替换主体的代码,当它运行时,它将再次调用自己,依此类推

每次进行替换时,您还将加载另一个jQuery副本,因为<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js">在主体中。

一种解决方案是将所有脚本放在<head>中,而不是放在正文中。另一种情况是,如果您只针对一个包含页面真实内容的容器DIV。

<html>
  <body>      
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
      <script>
    $(document).ready(function(){   
        var replaced = $("#content").html().replace(/Foo/g,'Bar');
        $("#content").html(replaced);
    });
      </script>
      <div id="content">
        <p>Foo</p>
      </div>
    </body>
</html> 

此外,当您将字符串作为.replace()的第一个参数时,它只替换第一个匹配项。如果要替换所有匹配项,则需要使用带有g修饰符的正则表达式。