一、有这样一段 html
<div class="divOne"> <p>嘿嘿嘿</p> </div> <div class="divOne"> <p>哈哈哈</p> </div>
二、jQuery 的 text() 方法
(1)当直接调用 $().text()
时,.text()的作用是(循环)读取(多个)目标元素的textContent/nodeValue
简单实现:
function readText(elem) { let node, ret = "", i = 0, nodeType = elem.nodeType console.log(nodeType,'nodeType22') //如果selector是类的话,会有多个目标元素,此时需要分别单个循环 //比如document.querySelectorAll('.divOne').nodeType ->undefined if (!nodeType) { while ((node = elem[i++])) { //单个获取 ret += readText(node) } } //元素节点,文档节点,文档碎片 else if (nodeType === 1 || nodeType === 9 || nodeType === 11) { //如果目标元素的内容是文本,则直接返回 if (typeof elem.textContent === "string") { /*jQuery没有用innerText获取文本的值,http://bugs.jquery.com/ticket/11153, 大概就是在IE8中新节点插入会保留所有回车。 所以jQuery采用了textContent获取文本值, textContent本身是dom3规范的,可以兼容火狐下的innerText问题。*/ return elem.textContent } //如果节点内容不是文本,则循环子节点,并依次获取它们的文本节点 else { for (elem = elem.firstChild; elem; elem = elem.nextSibling) { ret += readText(elem) } } } //文本节点、一个文档的CDATA部分(没遇到过这个) else if (nodeType === 3 || nodeType === 4) { //返回节点值 return elem.nodeValue; } //nodeType:注释节点 8,处理指令 7 //text()方法不处理这两个类型节点 return ret }
(2)当调用$().text(value)
时,.text(value)的作用是为每一个符合条件的目标元素的textContent设置为 value
简单实现:
writeText():
function writeText(value) { let elem, i = 0; //先清空目标元素的内容 customEmpty.call(this) //循环 for (; (elem = this[i]) != null; i++) { //元素节点,文档碎片,文档节点 if (elem.nodeType === 1 || elem.nodeType === 11 || elem.nodeType === 9) { // text()方法不会解析标签 elem.textContent = value; } } //return this 方便链式调用 return this }
customEmpty():
function customEmpty() { let elem, i = 0; //注意for循环的写法 for (; (elem = this[i]) != null; i++) { //如果是元素节点的话,清空该节点的所有内容 if (elem.nodeType === 1) { elem.textContent = ""; } } return this; }
(3)源码实现
源码:
jQuery.text()总体:
//源码6152行 text: function( value ) { return access( this, function( value ) { return value === undefined "htmlcode">//源码2833行 jQuery.text = Sizzle.getText; Sizzle.getText(): //源码1642行 getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } //元素节点、文档节点、文档碎片 else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) //如果目标元素的子节点是文本节点,则直接返回它的textContent if ( typeof elem.textContent === "string" ) { /*jQuery没有用innerText获取文本的值,http://bugs.jquery.com/ticket/11153, 大概就是在IE8中新节点插入会保留所有回车。 所以jQuery采用了textContent获取文本值, textContent本身是dom3规范的,可以兼容火狐下的innerText问题。*/ return elem.textContent; } //如果子节点不是文本节点,则循环子节点,并依次获取它们的文本节点 else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } //文本节点、一个文档的CDATA部分(没遇到过这个) else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; };③ .text(value)的情况调用这部分源码:
jQuery.text(value):
//写 //循环 this.empty().each( function() { //先清空目标元素的内容,然后再赋值 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { console.log(value,'value6159') //如果包含标签的话,需要用html()方法,text()方法不会解析标签 /*jQuery没有用innerText获取文本的值,http://bugs.jquery.com/ticket/11153, 大概就是在IE8中新节点插入会保留所有回车。 所以jQuery采用了textContent获取文本值, textContent本身是dom3规范的,可以兼容火狐下的innerText问题。*/ this.textContent = value; } } )empty():
//源码6231行 empty: function() { var elem, i = 0; for ( ; ( elem = this[ i ] ) != null; i++ ) { //如果是元素节点的话 if ( elem.nodeType === 1 ) { // Prevent memory leaks //清空内容和事件,防止内存泄漏 jQuery.cleanData( getAll( elem, false ) ); // Remove any remaining nodes //清空节点所有内容 elem.textContent = ""; } } return this; },④ 总结
$(".divOne").text()
的本质:(1)节点内容是文本,返回
$(".divOne")[i].textContent
(2)节点内容不是文本,循环返回
$(".divOne")[i].element[j].textContent
(3)节点内容是文本节点或一个文档的CDATA部分,则返回
$(".divOne")[i]. nodeValue
$(".divOne").text("Hello <b>world</b>!")
的本质:
(1)jQuery.cleanData()
(2)$(".divOne")[i].textContent = ""
(3)$(".divOne")[i].textContent="Hello world!"
注意:text() 不会去解析 html 标签!
参考:http://api.jquery.com/text/
完整代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery之text()</title> </head> <body> <script src="/UploadFiles/2021-04-02/jQuery.js">总结
以上所述是小编给大家介绍的jQuery中实现text()的方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
jquery,text方法
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。