Как клонировать <script>тегов с помощью jQuery - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть следующий код (упрощенный, чтобы увидеть логику):

<div id="alfa">Text
    <script>
        $("#alfa").click(function() {
            alert($(this).attr("id"));
        });
    </script>
</div>
<script>
    var clone = $("#alfa").clone().attr("id",$("#alfa").attr("id")+"_1");
    $("#alfa").after(clone);
</script>

Мне нужно видеть «alfa_1», когда я нажимаю на клонированный текст, но ничего не происходит.

Когда я использую clone (true, true), он работает, но я не вижу код клонированного div в Firebug, чтобы увидеть, что на самом деле происходит.

Также я не знаю, почему при щелчке по оригинальному элементу div предупреждение срабатывает дважды.

Спасибо.

Ответы [ 2 ]

7 голосов
/ 24 сентября 2011

Мне нужно видеть «alfa_1», когда я нажимаю на клонированный текст, но ничего не происходит.

Выполнение манипуляций с DOM или innerHTML над элементами <script> несовместимо в браузерах и не имеет никакого смысла с точки зрения цикла выполнения JavaScript. Избегайте этого во всех случаях.

Если вы хотите скопировать элементы DOM вместе с их обработчиками событий jQuery, используйте clone(true):

<div id="alfa">Text</div>

<script type="text/javascript">
    $('#alfa').click(function() {
        alert(this.id);
    });
    var clone= $('#alfa').clone(true);
    clone[0].id+= '_1'; // sorry, I couldn't bring myself to do this the jQuery way
    $('#alfa').after(clone);
</script>
1 голос
/ 24 сентября 2011

Предупреждение об исходном div запускается дважды, потому что сценарий определен внутри div.Переместите скрипт из div, и он должен работать как положено:

<div id="alfa">Text</div>
<script>
    $("#alfa").click(function() {
        alert($(this).attr("id"));
    });
</script>
...