2016-03-10 15 views
4

我有一个<script>标记,其内容位于<div>元素内。现在我需要复制/克隆内容,将其存储在一个变量中并在稍后添加。使用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

有内script标签div不分配变量es在脚本内的div。该脚本标签可以位于页面的任何位置。或者也可以在script.js文件中声明变量。

也许一个更好的办法是在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 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

是的,这很可能是原因。任何想法的解决方法?我可以考虑重构整个项目,这样我就不必克隆+追加..:/ – Sebsemillia

+0

不知道你想做什么更多,我们只能推测。也许在jsFiddle.net或类似的地方提供一个工作示例。 – Silkster

+0

你可以使用纯html来“克隆和追加”。你仍然可以使用jquery选择器来选择你想要复制的迭代,并使用this.innerhtml来复制内容。 – Khelmo