正确提取HTML
Extracting HTML The Right Way
我注意到了奇怪的行为。我在一个页面上有一个隐藏的(显示:'none')HTML。然后我创建了一个工具提示,并从隐藏的HTML中提取一些数据到这个工具提示中,例如:
$('#tooltip').html( $('#hiddenElement').html() );
如果我在隐藏的html(现在在工具提示中)中修改类名,那么当通过DOM:访问时,类名始终保持原始(不变)
alert($('#hiddenElement .element').hasClass('some-class');
因此,提取HTML看起来不太好,就像您使用了一个不反映DOM的副本一样。有人能解释一下到底发生了什么吗?我没有测试用例。希望有人熟悉我描述的内容。感谢
$('#hiddenElement').html()
将#hiddenElement
的innerHtml
作为一个字符串返回。
将该字符串插入$('#tooltip').html( /*here*/ );
将导致jQuery检测到您已经给定了一个字符串,因此它将继续并将该字符串解析为新的HtmlElement
。这意味着您已经从#hiddenElement
的内容中有效地创建了一个克隆,其花费的时间比jQuery.fn.clone().多得多
如果您不想创建克隆,可以使用jQuery.fn.contents()
:
$('#tooltip').html( $('#hiddenElement').contents() );
但是,由于这不会克隆内容,它将将其移动到新位置,因此内容将不再位于#hiddenElement
中。
据我所知,单个DOM节点不可能同时位于两个父节点中。
$('#tooltip').html( $('#hiddenElement').html() );
此行将用#hiddenElement
的内容替换#tooltip
的内容,但#hiddenElement
保持不变。
当您修改#hiddenElement
中的任何内容时,它将仅用于此元素。没有引用前一行中复制的内容,因此在修改#hiddenElement
的内容时,#tooltip
的内容不会发生更改。
如果要将内容从一个元素移动到另一个元素,则应使用append
方法,而不是html
方法。
$('#hiddenElement').html()
获取hiddenElementdiv下的HTML标记,而hiddenElement的div本身不包含在其中。
因此,您可以使用类似$('#tooltip .element')
的东西来更改类
- HTML页面如何提取通过表单传递的参数
- 使用javascript从HTML网页中提取图像url
- 如何从HTML下拉菜单中提取值
- 如何每秒从一个变量中提取一定次数的javascript/html
- 更换163;使用javascript从html文本区域中提取字符
- 正则表达式,用于从html格式的字符串中提取文本
- 从HTML代码中提取数据
- 使用JavaScript或AJAX从HTML表单中提取数据,然后将其传递给PHP
- 如何在HTML源代码中提取javascript变量
- 使用'从HTML表中提取行的内容<tr onclick=alertContents()>'
- 从html标记格式的字符串中提取键值对
- jQuery-数据提取问题(html遍历)
- 用于提取 HTML 标记子元素的正则表达式
- 从导入的 HTML/JS 文件中提取变量
- 使用JavaScript从HTML字符串中提取文本
- 如何将jquery ajax数据提取为html
- 如何从html中提取javascript
- 从html文件中的js中提取链接
- 从Html中提取特定值
- Angular将所有头文件html提取到一个文件中