jQuery获取元素内容
所有人都知道使用.html()可以获得元素内容,.find()可以获得子元素。
但这两个方法不是万能的,在很多场景我们需要其他的API。例如:
- 获得所有内容节点(包括文本、注释、元素)
- 获得iframe或frame内的document
- 获得所有直接子元素
下文中整理的jQuery获取元素内容的各种方法及其区别,
包括.html(), .text(), .children(), .contents()。
.html()
获取jQuery集合中首个元素的HTML内容,相当于HTMLElement.innerHTML。
该方法通常用于获取<script>的内容,设置渲染结果,
以及初始化在线编辑器的内容。
文档:http://api.jquery.com/html/
注意,设置表单元素的内容需要使用
.val()方法而非.html()。
.text()
获取jQuery集合中每个HTML元素的文本内容,相当于很多模板引擎中的strip_html。
相当于DOM API中的Node.textContent。
常用于从HTML文档获取文本摘要,比如生成分享内容,文档标题,以及文本消息。 例如:
<p><b>Test</b> Paragraph.</p>
<script>
$("p").text() === 'Test Paragraph.'
</script>
文档:http://api.jquery.com/text/
.children()
获取jQuery集合中每个HTML元素的子元素,只获得元素节点(nodeType===1)。
与.find()唯一的区别就是只取直接子元素。
.contents()
获取所有子节点,包括元素节点(nodeType===1)、文本节点(nodeType===3)
以及注释节点(nodeType===8)。
相当于DOM API中的ParentNode.children。
这在我们操作文本内容是非常有用,比如把当前页面文本中所有harttle设为大写:
$('p').contents()
.filter(function() {
return this.nodeType == 3;
})
.each(function(){
this.textContent = this.textContent
.replace(/harttle/, 'HARTTLE');
});
除此之外,.content()还可以获取frame元素内容的document对象。
看源码src/traversing:
contents: function( elem ) {
return elem.contentDocument || jQuery.merge( [], elem.childNodes );
}
因为contentDocument在操作同域iframe时才可用,
所以通过.contents()获取iframe内容也需要同域iframe。
文档:https://api.jquery.com/contents/
本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2016/11/13/jquery-element-contents.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。