JQueryClone()破坏了我的html.能够多次复制同一代码的替代方案
JQuery Clone() mangles my html. Alternatives to be able to copy the same code several times?
我有一个使用JQuery UI的选项卡小部件的页面。其中2个选项卡共享同一段HTML,这只不过是一个简单的HTML表:
<table border="0" cellpadding="0" cellspacing="0" class="showTable" id="table-person-info">
<tr>
<td class="pictureColumn">
<img alt="Person Photo" src="images/avatar.jpg" id="CurrPersonPhoto" />
</td>
<td>
<div id="CurrPersonFullName" class="fullName"></div>
<b class="popupInfo">Person ID: </b><div id="CurrPersonID" class="popupInfo"></div><br />
<b class="popupInfo">Hire Date: </b><div id="CurrHireDate" class="popupInfo"></div><br />
<b class="popupInfo">Tenure: </b><div id="CurrTenure" class="popupInfo"></div><br />
<b class="popupInfo">Location: </b><div id="CurrLocation" class="popupInfo"></div>
</td>
<td style="width:179px;">
<img src="edit.png" alt="Edit" />
<img src="log_activity.png" alt="Log activity" />
</td>
</tr>
</table>
该表在ajax调用后得到更新,为了避免重复相同的代码两次,我尝试使用JQueryclone()函数将其注入到选项卡上需要显示的两个位置
$("#table-person-info").clone(false).find("*").removeAttr("id").appendTo($("#person-Info-View"));
将clone方法的参数从true更改为false似乎没有任何区别。我发现这段代码把html代码完全破坏成这样:
<table border="0" cellpadding="0" cellspacing="0" class="showTable"> </table>
<tr>
<td class="pictureColumn">
</td>
<td>
</td>
<td style="width:179px;">
<img src="edit.png" alt="Edit" />
<img src="log_activity.png" alt="Log activity" />
</td>
</tr>
<img alt="Person Photo" src="images/avatar.jpg" />
<div id="CurrPersonFullName" class="fullName"></div>
<b class="popupInfo">Person ID: </b><div class="popupInfo"></div><br />
<b class="popupInfo">Hire Date: </b><div class="popupInfo"></div><br />
<b class="popupInfo">Tenure: </b><div class="popupInfo"></div><br />
<b class="popupInfo">Location: </b><div class="popupInfo"></div>
对JQuery文档的快速审查表明,这实际上是意料之中的事,我引用:
使用.clone()克隆未附加到DOM的元素集合时,它们插入DOM时的顺序不能保证
既然如此,我还有什么选择呢?我是否要重复该表,并在每次选择选项卡时手动更新值?我的意思是,只有两次,我想这并不难,但我想知道是否有更优雅的替代方案,或者我是否没有采取正确的方法来使用JQuery重用html代码。
很抱歉发了这么长的帖子,谢谢你的建议!
执行此代码时:
$("#table-person-info").clone(false)
.find("*").removeAttr("id")
.appendTo($("#person-Info-View"));
您已经使用find
进入了一个新的选择,因此您将附加所有具有已删除ID的元素,而不是原始父表。试试这个:
$("#table-person-info").clone(false)
.find("*").removeAttr("id").end()
.appendTo($("#person-Info-View"));
我知道这可能需要更长的时间来编写,不知道你是否在使用自己的对象,但你有没有想过在你的场景中使用jQuery模板?您可以很容易地将模板绑定到一个对象,只需在后端更新对象,这将自动更新您的表,并且与每次更新整个表相比,所需的处理要少得多。
相关文章:
- 使用javascript代码将HTML元素复制到剪贴板
- 在jquery中复制特定的html代码
- 为什么这个文件上传拖放不起作用,我完全复制了 CodePen 代码
- 用于在表中添加行的Javascript代码将单元格中的数据复制到新行中
- 直接从代码笔复制的圆环图代码不起作用
- 将Excel值复制到javascript代码中
- 使用JavaScript从网页复制HTML代码或图像链接
- 如何让我的导航栏位于每个HTML页面的顶部(避免复制相同的代码)
- 阻止人们复制JavaScript代码
- 如何在 Chrome 控制台中复制多个元素的 HTML 代码
- 需要复制代码
- 即使我从另一个工作小提琴复制代码,JSFiddle 也不起作用
- 什么是不复制HTML页面和子页面上代码的现代方法
- 角度.js分页过滤的数据并显示总项目,而无需在视图/控制器中复制代码
- 从JSFiddle复制代码
- 使用文本输入框复制代码以搜索解析将返回控制台错误
- 从JSFiddle复制代码问题
- 热加载程序复制代码(n 次)而不是热插拔
- viewContentLoaded——无需为每个控制器复制代码——AngularJS
- 如何在不复制代码的情况下消除耦合