html和text都可以获取和修改DOM节点里的内容,方法如下:

  • html(value)     ;获取匹配元素集合中的一个元素的innerHTML内容,或者设置每个元素的innerHTML内容,                ;value可选,可以是html代码或返回html代码的函数,如果没有参数则获取匹配元素集合中第一个元素的innerHTML内容
  • text(text)         ;获取匹配元素集合中所有元素合并后的文本内容,或者设置每个元素的文本内容,封装了createTextNode方法

writer by:大沙漠 QQ:22969969

举个栗子:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="http://libs.baidu.com/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
<div>Hello World!</div>
<button id="b1">按钮1</button>
<button id="b2">按钮2</button>
<script>
$('#b1').click(()=>{
$('div').html('<p>Hello jQuery!</p>') //使用html()设置值
})
$('#b2').click(()=>{
$('div').text('<p>Hello jQuery!</p>') //使用text()设置值
})
</script>
</body>
</html>

渲染如下:

点击按钮1将使用html()设置值,此时渲染如下:

点击按钮2将使用text()设置值,此时渲染如下:

可以看到对于html()来说,就把里面的标签的含义解析出来,而对于text()来说,只是单纯的展示出来,这是因为前者是通过设置innerHTML来实现的,后者是通过createTextNode创建的文本节点来实现的

源码分析


对于html来说,它是通过innerHTML来实现的,实现如下:

jQuery.fn.extend({
html: function( value ) { //获取匹配元素集合中第一个元素的HTML内容,或者设置每个元素的HTML内容。通过读取、设置innerHTML来实现。value可选,可以是html代码或返回html代码的函数。
if ( value === undefined ) { //如果没有传入参数,则读取第一个匹配元素的HTML内容
return this[0] && this[0].nodeType === 1 ? //如果this[0]存在且是一个元素节点
this[0].innerHTML.replace(rinlinejQuery, "") : //读取innerHTML属性
null; // See if we can take a shortcut and just use innerHTML
} else if ( typeof value === "string" && !rnoInnerhtml.test( value ) && //html是代码代码且不含有script或style标签。
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) && //浏览器不会忽略前导空白负,或者html代码不以空白符开头。
!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) { //html代码中的标签不需要包裹父标签就可以正确的被序列化 value = value.replace(rxhtmlTag, "<$1></$2>"); //修正自闭标签 try {
for ( var i = 0, l = this.length; i < l; i++ ) { //遍历当前匹配元素
// Remove element nodes and prevent memory leaks
if ( this[i].nodeType === 1 ) { //如果该节点是一个元素节点
jQuery.cleanData( this[i].getElementsByTagName("*") ); //先移除所有后代元素关联的数据和事件
this[i].innerHTML = value; //尝试直接设置属性innerHTML插入HTML内容。
}
} // If using innerHTML throws an exception, use the fallback method
} catch(e) {
this.empty().append( value ); //如果在设置innerHTML时跑出了异常,则先调用empty()移除后代元素关联的数据和事件、移除子元素,然后调用.append()插入新内容。
} } else if ( jQuery.isFunction( value ) ) { //如果value是函数,则遍历匹配元素集合,在每个元素上执行该函数,并取其返回值作为新html内容,迭代调用.html(vlue)。
this.each(function(i){
var self = jQuery( this ); self.html( value.call(this, i, self.html()) );
}); } else {
this.empty().append( value );
} return this; //最后返回this,以支持链式操作
},
})

对于text来说,它是通过createTextNode创建的文本节点来实现的,如下:

jQuery.fn.extend({
text: function( text ) { //获取匹配元素集合中所有元素合并后的文本内容,或者设置每个元素的文本内容,设置时是通过createText()方法创建文本节点并append()进去的。
if ( jQuery.isFunction(text) ) { //如果text是函数,则在每个匹配元素上执行该函数,并取其返回值作为新文本内容,迭代调用.text(text)方法。
return this.each(function(i) {
var self = jQuery( this ); self.text( text.call(this, i, self.text()) ); //调用函数时,设置关键字this执行当前元素,传入了两个参数:当前元素在集合中的下标位置、当前元素的旧文本内容。
});
} if ( typeof text !== "object" && text !== undefined ) { //如果参数text不是对象,也不是undefined,即可能是字符串、数字或布尔值。
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); //先清空内容,然后创建文本节点,并插入每个匹配元素中
} return jQuery.text( this ); //如果没有传入参数或者参数text不合法(对象),则调用jQuery.text(elem)获取所有匹配元素合并后的文本内容(sizzle选择器中)。
},
})

比较简单的

jQuery 源码解析(二十五) DOM操作模块 html和text方法的区别的更多相关文章

  1. jQuery 源码解析(二十四) DOM操作模块 包裹元素 详解

    本节说一下DOM操作模块里的包裹元素子模块,该模块可将当前匹配的元素替换指定的DOM元素,有如下方法: wrap(html)               ;在每个匹配元素的外层添加一层DOM元素   ...

  2. jQuery 源码解析(二十八) 样式操作模块 scrollLeft和scrollTop详解

    scrollLeft和scrollTop用于获取/设置滚动条的,如下: scrollLeft(val) ;读取或设置整个页面的水平滚动条距离 scrollTop(val) ;读取或设置整个页面的垂直滚 ...

  3. jQuery 源码解析(二十六) 样式操作模块 样式详解

    样式操作模块可用于管理DOM元素的样式.坐标和尺寸,本节讲解一下样式相关,样式操作通过jQuery实例的css方法来实现,该方法有很多的执行方法,如下: css(obj)            ;参数 ...

  4. jQuery 源码解析(二十九) 样式操作模块 尺寸详解

    样式操作模块可用于管理DOM元素的样式.坐标和尺寸,本节讲解一下尺寸这一块 jQuery通过样式操作模块里的尺寸相关的API可以很方便的获取一个元素的宽度.高度,而且可以很方便的区分padding.b ...

  5. jQuery 源码解析(二十二) DOM操作模块 复制元素 详解

    本节说一下DOM操作模块里的复制元素子模块,该模块可以复制一个DOM节点,并且可选择的设置是否复制其数据缓存对象(包含事件信息)和是否深度复制(子孙节点等),API如下: $.clone(elem, ...

  6. jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究

    终于动笔开始 jQuery 源码解析第二篇,写文章还真是有难度,要把自已懂的表述清楚,要让别人听懂真的不是一见易事. 在 jQuery 源码解析一:jQuery 类库整体架构设计解析 一文,大致描述了 ...

  7. jQuery 源码解析(二十三) DOM操作模块 替换元素 详解

    本节说一下DOM操作模块里的替换元素模块,该模块可将当前匹配的元素替换指定的DOM元素,有两个方法,如下: replaceWith(value)     ;使用提供的新内容来替换匹配元素集合中的每个元 ...

  8. jQuery 源码分析(二十) DOM操作模块 插入元素 详解

    jQuery的DOM操作模块封装了DOM模型的insertBefore().appendChild().removeChild().cloneNode().replaceChild()等原生方法.分为 ...

  9. jQuery 源码解析(二十七) 样式操作模块 坐标详解

    样式操作模块可用于管理DOM元素的样式.坐标和尺寸,本节讲解一下坐标这一块. 对于坐标来说,jQuery提供了一个offset方法用于获取第一个匹配元素的坐标或者设置所有匹配元素的坐标,还有offse ...

随机推荐

  1. js实现冒泡排序(bubble sort)快速排序(quick sort)归并排序(merge sort)

    排序问题相信大家都比较熟悉了.用js简单写了一下几种常用的排序实现.其中使用了es6的一些语法,并且不仅限于数字--支持各种类型的数据的排序.那么直接上代码: function compare (a, ...

  2. 鲲鹏凌云,并行科技Paramon通过华为云鲲鹏云服务兼容性认证

    随着Cloud2.0时代到来,5G技术开始应用普及,超算云服务需求不断升级,业务多样性.数据多样性不断延伸.2019年7月,华为召开鲲鹏计算产业发展峰会,依托在联接领域坚实的基础,华为未来将着力打造智 ...

  3. Redis Cluster 自动化安装,扩容和缩容

    Redis Cluster 自动化安装,扩容和缩容 之前写过一篇基于python的redis集群自动化安装的实现,基于纯命令的集群实现还是相当繁琐的,因此官方提供了redis-trib.rb这个工具虽 ...

  4. Vue.js命名风格指南

    前言 本命名风格指南推荐了一种统一的命名规范来编写 Vue.js 代码.这使得代码具有如下的特性: 统一团队的命名规范,其它开发者或是团队成员更容易上手阅读和理解. IDEs 更容易理解代码,从而提供 ...

  5. iOS使用Workspace来管理多项目 ( 转 )

    开发中会有一些常用的类或方法,或者是某个特定功能的,比如一个自定义的弹框.一个更容易使用的网络请求库,可以把它们放到一个单独的工程里,通过静态库(library.FrameWork)的方式应用到任何其 ...

  6. Mybatis底层源码分析

    MyBatis 流程图 Configuration.xml 该配置文件是 MyBatis 的全局配置文件,在这个文件中可以配置诸多项目.常用的内容是别名设置,拦截器设置等. Properties(属性 ...

  7. Cannot forward after response has been committed问题的解决

    Cannot forward after response has been committed问题解决及分析 通过TOMCAT把系统启动,可以正常登陆门户,登陆进去选择子系统的时候点击登陆的时候,可 ...

  8. tensorflow SavedModelBuilder用法

    训练代码: # coding: utf-8 from __future__ import print_function from __future__ import division import t ...

  9. Asp.net Core 异常日志与API返回值处理

    需求: 1.对异常进行捕获记录日志 并且修改返回值给前端 解释: ILogger4是自定义的一个日志,更改它就好 解决方案1: 使用中间件进行异常捕获并且修改其返回值 public class Err ...

  10. 【Selenium】selenium.common.exceptions.ElementClickInterceptedException

    出现问题: 使用代码点击提交按钮: driver.find_element(By.CSS_SELECTOR,"#submit").click() 出现如下异常: selenium. ...