javascript - 以正确的方式提取 HTML

标签 javascript jquery css dom innerhtml

我注意到了奇怪的行为。我在页面上有一个隐藏的 (display:'none') HTML。然后我创建一个工具提示并将一些数据从隐藏的 HTML 中提取到这个工具提示中,例如,这样:

 $('#tooltip').html( $('#hiddenElement').html() );

如果我在那个隐藏的 html 中修改类名(现在在工具提示中),那么当通过 DOM 访问类名时,它始终保持原始(不变):

 alert($('#hiddenElement .element').hasClass('some-class');

因此看起来提取 HTML 效果不佳,就好像您使用的是不反射(reflect) DOM 的副本一样。谁能解释到底发生了什么?我没有测试用例。希望有人熟悉我所描述的内容。谢谢

最佳答案

$('#hiddenElement').html()#hiddenElementinnerHtml 作为一个字符串返回。

将该字符串插入 $('#tooltip').html(/*here*/); 将导致 jQuery 检测到您提供了一个字符串,因此它将继续并将字符串解析为新的 HtmlElement。这意味着您已经从 #hiddenElement 的内容中有效地创建了一个克隆,所花费的时间比 jQuery.fn.clone() 多得多。 .

如果您不想创建克隆,您可以使用 jQuery.fn.contents() :

$('#tooltip').html( $('#hiddenElement').contents() );

然而,由于这不会克隆内容,它会将它们移动到一个新位置,因此内容将不再位于#隐藏元素

据我所知,单个 DOM 节点不可能同时位于两个父节点中。

关于javascript - 以正确的方式提取 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069122/

相关文章:

javascript - React Hooks 实现计数器

html - 对齐 HTML 布局

javascript - 如何在JQuery中使用带有 'for'的多个数组元素

javascript - 使用ajax和json保存数据

css - JavaFX 选项卡文本和大小问题

html - 为什么 SO HTML 结构会破坏浏览器 "reader modes"?

javascript - 我们如何创建自己的 CDN 链接?

javascript - 有条件地呈现结束标记以模拟日历行为

javascript - React map 函数混淆

jquery - ASP.NET List<> 与 AJAX AutoComplete For JQuery 一起使用。 ?要么转换为 JS JSON 要么 ajax 调用