1

我有一个javascript代码:

<html>
<head>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
function datacheck(content){
var content = "<script>for(var i = 0 ; i< 10 ; i++) alert('hello')</script>";
 var text = $(content).text();

alert(text);

}
</script>
<body>
<div>
Click  <input type="button" name="button1" onclick="datacheck()" />
</div>
</body>
</html>

$(内容).text(); 在所有浏览器中都可以去除 html 内容,但在 IE-8 中不起作用,如果我使用

 var content = "<p>for(var i = 0 ; i< 10 ; i++) alert('hello')</p>";

那么它在 IE-8 中也可以正常工作。谁能帮助我如何制作$(content).text(); 也在IE8中工作。感谢您的每一次帮助。

4

3 回答 3

3

问题是浏览器看到<script>字符串中的标签并决定这意味着脚本的结束。

第 1 课:永远不要在您的 javascript 代码中包含<script>标签,即使它在字符串中。浏览器可能会误解它。

解决方法:

  • 在脚本代码周围包含注释或 CDATA 标记。例如

    <script>
    <!--
    ...... js code here ........
    -->
    </script>
    
  • 将字符串中的<script>标签分解为子字符串。例如

    var content = "<sc"+"ript>for(var i = 0 ; i< 10 ; i++) alert('hello')</scr"+"ipt>";
    
  • 只是不要<script>以这种方式使用标签——如果您使用它来将 JS 代码注入到您的页面中,那么几乎可以肯定有更好的方法来这样做。也许您应该使用像require.js这样的库?

于 2013-09-03T11:47:57.183 回答
1

您可能需要一个CDATA 标记

<script>
<![CDATA[
function datacheck(content){
var content = "<script>for(var i = 0 ; i< 10 ; i++) alert('hello')</script>";
 var text = $(content).text();

alert(text);

}
]]>
</script>
于 2013-09-03T11:41:13.040 回答
0
<script>
function datacheck(content){
var content = "<script>for(var i = 0 ; i< 10 ; i++) alert('hello')</script>";
content = '<![CDATA[' + content + ']]>';
 var text = ($(content).text()).replace(']]>', '');
alert(text);
}
</script>

这将正常工作。感谢tea2code 的回答。

于 2013-09-04T13:49:42.080 回答