1

我需要一些关于 jQuery 的帮助。

当我尝试通过 $.get 获取带有嵌入 js 页面内容的 html 时,它的效果很好。但是当我试图将它附加到某个 div 时,所有脚本都被删除了。

在控制台中,当我这样做时,它看起来不错

$('.my_div').html() + '<script>alert("text")</script>'

但是当我在做

 $('.my_div').html($('.my_div').html() + '<script>alert("text")</script>')

脚本正在运行并正在删除

如何在不运行和删除的情况下将 html+js 代码附加到 div?

谢谢!

升级版:

我的例子:

索引.html

...

<div class="masonry">
    <div class="a1">
        <p>text</p>
        <script>alert('example')</script>
    </div>
    <div class="a1">
        <p>text</p>
        <script>alert('example')</script>
    </div>
    <div class="a1">
        <p>text</p>
        <script>alert('example')</script>
    </div>
</div>

...

<script>

$.get('get_news.php',function(response){

    $('.masonry').append(response);

});
</script>

...

get_news.php

    <div class="b1">
        <p>text</p>
        <script>alert('example1')</script>
    </div>
    <div class="b1">
        <p>text</p>
        <script>alert('example1')</script>
    </div>
    <div class="b1">
        <p>text</p>
        <script>alert('example1')</script>
    </div>

...

我会得到

<div class="masonry">
    <div class="a1">
        <p>text</p>
        <script>alert('example')</script>
    </div>
    <div class="a1">
        <p>text</p>
        <script>alert('example')</script>
    </div>
    <div class="a1">
        <p>text</p>
        <script>alert('example')</script>
    </div>

    <div class="b1">
        <p>text</p>
        <script>alert('example1')</script>
    </div>
    <div class="b1">
        <p>text</p>
        <script>alert('example1')</script>
    </div>
    <div class="b1">
        <p>text</p>
        <script>alert('example1')</script>
    </div>

</div>

我该怎么做?

4

2 回答 2

1

这是默认行为- 它会在将内容附加到 DOM 时去除.html()脚本和它们。evaljQuery 甚至提供$.parseHTML了在不评估脚本的情况下剥离脚本的默认设置,以防止 XSS。

如果您已经在页面中执行脚本,那么绝大多数情况下您只需将代码放在同一个脚本中即可。但是,如果您真的想要/需要将新脚本附加到页面,您可以通过以下方式完成append

$('.my_div').append($('<script>', { text: 'alert("foo");' }));

小提琴

于 2013-02-24T01:30:45.370 回答
0

如果您不想删除原始内容,可以使用 append。至于停止执行脚本标签,一种方法是更改​​脚本类型"text/html"或使用html转义功能。

http://jsfiddle.net/R5xad/

于 2013-02-24T01:28:55.033 回答