jQuery用脚本附加html

时间:2013-02-24 01:02:44

标签: javascript jquery html

我需要一些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?

谢谢!

UPD:

我的例子:

的index.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>

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这是.html()的默认行为 - 它会在向DOM添加内容时删除脚本和eval。 jQuery甚至提供$.parseHTML,它默认剥离脚本而不评估它们以防止XSS。

如果您已在页面中执行脚本,那么绝大多数情况下您只需将代码放在同一个脚本中即可。但是,如果您真的希望/需要在页面上添加新脚本,则可以通过append执行此操作:

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

Fiddle

答案 1 :(得分:0)

如果您不想删除原始内容,可以使用追加。至于停止执行脚本标记,一种方法是将脚本类型更改为"text/html"或使用html转义函数。

http://jsfiddle.net/R5xad/