2016-03-10 2 views
4

У меня есть тег <script> с содержимым в пределах элемента <div>. Теперь мне нужно скопировать/клонировать содержимое, сохранить его в переменной и добавить его позже.copy/clone script tag с jquery

Странно, когда я добавляю переменное содержимое, я просто получаю внешний <div>.

Любая идея, что я делаю неправильно? Мы используем jQuery 1.8.2.

Вот мой код:

HTML содержание:

<div id="payl"> 
    <div class="toolTipHandler"> 
     <script type="text/javascript"> 
      var xxx_title = "<h4>title</h4>"; 
      var xxx_text = "<p>bla bla</p>"; 
     </script> 
    </div> 
</div> 

script.js содержание:

var toolTipHandler = jQuery('#payl .toolTipHandler').clone(true); 
document.getElementById('payl').innerHTML = ''; 
jQuery('#payl').append(toolTipHandler); 

Результат:

<div class="toolTipHandler"></div> 
+1

, кажется, появляются с JQuery <= 1.8.3 на jsfiddle, вы можете обновить ваш Библиотека jQuery с более новой версией – Hacketo

+0

Какую версию JQuery вы используете? – Khelmo

+0

@Hacketo, мы используем 1.8.2 :(И нет, к сожалению, я не могу его обновить ..:/ – Sebsemillia

ответ

0

Имея тег сценария в пределах div не присваивает переменной в сценарии в div. Этот тег скрипта может находиться в любом месте страницы. Или переменные могут также быть объявлены в вашем файле script.js.

Может быть, лучше было бы использовать DATA- атрибуты в toolTipHandler DIV:

<div id="payl"> 
    <div class="toolTipHandler" data-title="<h4>title</h4>" data-text="<p>bla bla</p>"> 
    </div> 
</div> 

Но положить разметку значений не очень хорошее использование данных- атрибутов. Я бы сделал что-то вроде этого:

<div id="payl"> 
    <div class="toolTipHandler" data-title="title" data-text="bla bla"> 
     <h4></h4> 
     <p></p> 
    </div> 
</div> 

Затем вставьте значения из данных toolTipHandler. Ваш JavaScript может выглядеть примерно так:

var tth = $("#pay1 .toolTipHandler"); 
var title = tth.data("title"); 
var text = tth.data("text"); 
tth.find("h4").innerText = title; 
tth.find("p").innerText = text; 
+0

Да, я тоже думал об атрибутах данных, но из тех же соображений отстал от него. К сожалению, структура тегов html может отличаться, и будет больше двух переменных. Но спасибо за ваши усилия! – Sebsemillia

2

Согласно

https://jquery.com/upgrade-guide/1.9/

До 1,9, любого HTML-акцепторной методы (например, $(), .append(), или .wrap()) выполняются скрипты в HTML и удалить их из документа, чтобы предотвратить их снова выполняется

Таким образом, проблема является .append() удаляет сценарий

Обходным решением может быть просто использование простого html для «клонирования и добавления» например. Скажем, у вас есть еще один DIV

<div id='payl2'>....</div> 

Просто скопируйте innerhtml

document.getElementById('payl2').innerHTML=document.getElementById('payl2').innerHTML+document.getElementById('payl').innerHTML; 

Результат будет выглядеть так:

<div id='payl2'>.... 

<div class="toolTipHandler"> 
    <script type="text/javascript"> 
     var xxx_title = "<h4>title</h4>"; 
     var xxx_text = "<p>bla bla</p>"; 
    </script> 
</div> 

</div> 
+0

Да, это, скорее всего, причина. Любая идея обходного пути? Я могу просто подумать о реструктуризации всего проекта, чтобы мне не пришлось клонировать + append ..:/ – Sebsemillia

+0

Не зная больше о том, что вы пытаетесь сделать, мы можем только догадываться. Возможно, вы найдете рабочий пример на jsFiddle.net или где-то в этом роде. – Silkster

+0

Вы можете использовать простой html для клонирования и добавления. Вы все равно можете использовать селектор jquery, чтобы выбрать whetever, который хотите скопировать итерацию по выбору, и использовать this.innerhtml для копирования содержимого. – Khelmo