2013-02-24 2 views
1

Мне нужна помощь с jQuery.jQuery append html со сценариями

Когда я пытаюсь получить html с включенным содержимым страницы js через $ .get, он работает хорошо. Но когда я пытаюсь добавить его к некоторому div, все скрипты удаляются.

В консоли его взгляд отлично, когда я делаю smthing как этот

$('.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> 

Как я могу это сделать?

+0

Вы пробовали добавление сценария в виде текста()? – xylar

+0

Что вы подразумеваете под «бегом и удалением?» Что ты пытаешься сделать? –

+0

@xylar да, без успеха = ( –

ответ

0

Вы можете использовать append, если вы не хотите удалить исходный контент. Что касается прекращения выполнения сценария сценария, одним из способов является изменение типа сценария на "text/html" или использование функции html escape.

http://jsfiddle.net/R5xad/

1

Это поведение по умолчанию .html() - это раздеть скрипты и eval их, добавляя содержимое в DOM. jQuery даже предоставляет $.parseHTML, который по умолчанию отключает скрипты, не оценивая их, чтобы предотвратить использование XSS.

Если вы уже выполняете скрипт на странице, то большую часть времени вы можете просто поместить свой код в тот же скрипт. Но если вы действительно хотите/нужно добавить новый скрипт на страницу, вы можете сделать это через append:

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

Fiddle

+0

нет успеха с этим '$ ('. my_div '). append ($ (' ** –

+0

Осмотрите скрипку , он явно имеет тег 'script', добавленный в DOM. Хотя это звучит как проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - обновите вопрос, чтобы показать нам, в чем проблема, которую вы пытаетесь решить, и мы найдем лучший способ. –

+0

Thank s для указания на параметр 'keepScripts' для параметра' 'parseHTML()'] (http://api.jquery.com/jquery.parsehtml/). –

Смежные вопросы