<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        jQuery中實(shí)現(xiàn)text()的方法

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:59:14
        文檔

        jQuery中實(shí)現(xiàn)text()的方法

        jQuery中實(shí)現(xiàn)text()的方法:一、有這樣一段 html <div class=divOne> <p>嘿嘿嘿</p> </div> <div class=divOne> <p>哈哈哈</p> </div> 二、jQuery 的 text() 方法 (1)當(dāng)直接調(diào)用 $()
        推薦度:
        導(dǎo)讀jQuery中實(shí)現(xiàn)text()的方法:一、有這樣一段 html <div class=divOne> <p>嘿嘿嘿</p> </div> <div class=divOne> <p>哈哈哈</p> </div> 二、jQuery 的 text() 方法 (1)當(dāng)直接調(diào)用 $()

        一、有這樣一段 html

        <div class="divOne">
         <p>嘿嘿嘿</p>
        </div>
        <div class="divOne">
         <p>哈哈哈</p>
        </div>

        二、jQuery 的 text() 方法

        (1)當(dāng)直接調(diào)用 $().text()時(shí),.text()的作用是(循環(huán))讀取(多個(gè))目標(biāo)元素的textContent/nodeValue

        簡(jiǎn)單實(shí)現(xiàn):

         function readText(elem) {
         let node,
         ret = "",
         i = 0,
         nodeType = elem.nodeType
         console.log(nodeType,'nodeType22')
         //如果selector是類的話,會(huì)有多個(gè)目標(biāo)元素,此時(shí)需要分別單個(gè)循環(huán)
         //比如document.querySelectorAll('.divOne').nodeType ->undefined
         if (!nodeType) {
         while ((node = elem[i++])) {
         //單個(gè)獲取
         ret += readText(node)
         }
         }
         //元素節(jié)點(diǎn),文檔節(jié)點(diǎn),文檔碎片
         else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
         //如果目標(biāo)元素的內(nèi)容是文本,則直接返回
         if (typeof elem.textContent === "string") {
         /*jQuery沒有用innerText獲取文本的值,http://bugs.jquery.com/ticket/11153,
         大概就是在IE8中新節(jié)點(diǎn)插入會(huì)保留所有回車。
         所以jQuery采用了textContent獲取文本值,
         textContent本身是dom3規(guī)范的,可以兼容火狐下的innerText問題。*/
         return elem.textContent
         }
         //如果節(jié)點(diǎn)內(nèi)容不是文本,則循環(huán)子節(jié)點(diǎn),并依次獲取它們的文本節(jié)點(diǎn)
         else {
         for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
         ret += readText(elem)
         }
         }
         }
         //文本節(jié)點(diǎn)、一個(gè)文檔的CDATA部分(沒遇到過這個(gè))
         else if (nodeType === 3 || nodeType === 4) {
         //返回節(jié)點(diǎn)值
         return elem.nodeValue;
         }
         //nodeType:注釋節(jié)點(diǎn) 8,處理指令 7
         //text()方法不處理這兩個(gè)類型節(jié)點(diǎn)
         return ret
         }

        (2)當(dāng)調(diào)用$().text(value)時(shí),.text(value)的作用是為每一個(gè)符合條件的目標(biāo)元素的textContent設(shè)置為 value

        簡(jiǎn)單實(shí)現(xiàn):

        writeText():

         function writeText(value) {
         let elem,
         i = 0;
         //先清空目標(biāo)元素的內(nèi)容
         customEmpty.call(this)
         //循環(huán)
         for (; (elem = this[i]) != null; i++) {
         //元素節(jié)點(diǎn),文檔碎片,文檔節(jié)點(diǎn)
         if (elem.nodeType === 1 || elem.nodeType === 11 || elem.nodeType === 9) {
         // text()方法不會(huì)解析標(biāo)簽
         elem.textContent = value;
         }
         }
         //return this 方便鏈?zhǔn)秸{(diào)用
         return this
         }

        customEmpty():

         function customEmpty() {
         let elem,
         i = 0;
         //注意for循環(huán)的寫法
         for (; (elem = this[i]) != null; i++) {
         //如果是元素節(jié)點(diǎn)的話,清空該節(jié)點(diǎn)的所有內(nèi)容
         if (elem.nodeType === 1) {
         elem.textContent = "";
         }
         }
         return this;
         }

        (3)源碼實(shí)現(xiàn)

        源碼:

        jQuery.text()總體:

        //源碼6152行
         text: function( value ) {
         return access( this, function( value ) {
         return value === undefined ?
         //讀
         //如果直接調(diào)用text()的話,就調(diào)用Sizzle.getText
         jQuery.text( this ) :
         //寫
         //循環(huán)
         this.empty().each( function() {
         //先清空目標(biāo)元素的內(nèi)容,然后再賦值
         if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
         console.log(value,'value6159')
         //如果包含標(biāo)簽的話,需要用html()方法,text()方法不會(huì)解析標(biāo)簽
         /*jQuery沒有用innerText獲取文本的值,http://bugs.jquery.com/ticket/11153,
         大概就是在IE8中新節(jié)點(diǎn)插入會(huì)保留所有回車。
         所以jQuery采用了textContent獲取文本值,
         textContent本身是dom3規(guī)范的,可以兼容火狐下的innerText問題。*/
         this.textContent = value;
         }
         } )
         }, null, value, arguments.length );
         },

        源碼解析:

        ① 調(diào)用text(),實(shí)際上是調(diào)用access()

        也就是說:調(diào)用jQuery.access()相當(dāng)于調(diào)用了fn.call( elems, value ),即自定義的方法jQuery.access(this, function(value) {xxx})

        ② .text()的情況調(diào)用這部分源碼:

        jQuery.text()調(diào)用的其實(shí)是Sizzle.getText()

         //源碼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 );
         }
         }
         //元素節(jié)點(diǎn)、文檔節(jié)點(diǎn)、文檔碎片
         else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
         // Use textContent for elements
         // innerText usage removed for consistency of new lines (jQuery #11153)
         //如果目標(biāo)元素的子節(jié)點(diǎn)是文本節(jié)點(diǎn),則直接返回它的textContent
         if ( typeof elem.textContent === "string" ) {
         /*jQuery沒有用innerText獲取文本的值,http://bugs.jquery.com/ticket/11153,
         大概就是在IE8中新節(jié)點(diǎn)插入會(huì)保留所有回車。
         所以jQuery采用了textContent獲取文本值,
         textContent本身是dom3規(guī)范的,可以兼容火狐下的innerText問題。*/
         return elem.textContent;
         }
         //如果子節(jié)點(diǎn)不是文本節(jié)點(diǎn),則循環(huán)子節(jié)點(diǎn),并依次獲取它們的文本節(jié)點(diǎn)
         else {
         // Traverse its children
         for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
         ret += getText( elem );
         }
         }
         }
         //文本節(jié)點(diǎn)、一個(gè)文檔的CDATA部分(沒遇到過這個(gè))
         else if ( nodeType === 3 || nodeType === 4 ) {
         return elem.nodeValue;
         }
         // Do not include comment or processing instruction nodes
         return ret;
         };

        ③ .text(value)的情況調(diào)用這部分源碼:

        jQuery.text(value):

         //寫
         //循環(huán)
         this.empty().each( function() {
         //先清空目標(biāo)元素的內(nèi)容,然后再賦值
         if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
         console.log(value,'value6159')
         //如果包含標(biāo)簽的話,需要用html()方法,text()方法不會(huì)解析標(biāo)簽
         /*jQuery沒有用innerText獲取文本的值,http://bugs.jquery.com/ticket/11153,
         大概就是在IE8中新節(jié)點(diǎn)插入會(huì)保留所有回車。
         所以jQuery采用了textContent獲取文本值,
         textContent本身是dom3規(guī)范的,可以兼容火狐下的innerText問題。*/
         this.textContent = value;
         }
         } )

        empty():

         //源碼6231行
         empty: function() {
         var elem,
         i = 0;
         for ( ; ( elem = this[ i ] ) != null; i++ ) {
         //如果是元素節(jié)點(diǎn)的話
         if ( elem.nodeType === 1 ) {
         // Prevent memory leaks
         //清空內(nèi)容和事件,防止內(nèi)存泄漏
         jQuery.cleanData( getAll( elem, false ) );
         // Remove any remaining nodes
         //清空節(jié)點(diǎn)所有內(nèi)容
         elem.textContent = "";
         }
         }
         return this;
         },

        ④ 總結(jié)

        $(".divOne").text()的本質(zhì):

        (1)節(jié)點(diǎn)內(nèi)容是文本,返回$(".divOne")[i].textContent

        (2)節(jié)點(diǎn)內(nèi)容不是文本,循環(huán)返回$(".divOne")[i].element[j].textContent

        (3)節(jié)點(diǎn)內(nèi)容是文本節(jié)點(diǎn)或一個(gè)文檔的CDATA部分,則返回$(".divOne")[i]. nodeValue

        $(".divOne").text("Hello <b>world</b>!")的本質(zhì):

        (1)jQuery.cleanData()

        (2)$(".divOne")[i].textContent = ""

        (3)$(".divOne")[i].textContent="Hello world!"

        注意:text() 不會(huì)去解析 html 標(biāo)簽!

        參考:http://api.jquery.com/text/

        完整代碼:

        <!DOCTYPE html>
        <html lang="en">
        <head>
         <meta charset="UTF-8">
         <title>jQuery之text()</title>
        </head>
        <body>
        <script src="jQuery.js"></script>
        <div class="divOne">
         <!--<p id="divTwo">嘿嘿嘿</p>-->
         <p>嘿嘿嘿</p>
        </div>
        <div class="divOne">
         <p>哈哈哈</p>
        </div>
        <input type="text" id="inputOne">
        <script>
         function readText(elem) {
         let node,
         ret = "",
         i = 0,
         nodeType = elem.nodeType
         console.log(nodeType,'nodeType22')
         //如果selector是類的話,會(huì)有多個(gè)目標(biāo)元素,此時(shí)需要分別單個(gè)循環(huán)
         //比如document.querySelectorAll('.divOne').nodeType ->undefined
         if (!nodeType) {
         while ((node = elem[i++])) {
         //單個(gè)獲取
         ret += readText(node)
         }
         }
         //元素節(jié)點(diǎn),文檔節(jié)點(diǎn),文檔碎片
         else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
         //如果目標(biāo)元素的內(nèi)容是文本,則直接返回
         if (typeof elem.textContent === "string") {
         /*jQuery沒有用innerText獲取文本的值,http://bugs.jquery.com/ticket/11153,
         大概就是在IE8中新節(jié)點(diǎn)插入會(huì)保留所有回車。
         所以jQuery采用了textContent獲取文本值,
         textContent本身是dom3規(guī)范的,可以兼容火狐下的innerText問題。*/
         return elem.textContent
         }
         //如果節(jié)點(diǎn)的內(nèi)容不是文本,則循環(huán)子節(jié)點(diǎn),并依次獲取它們的文本節(jié)點(diǎn)
         else {
         for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
         ret += readText(elem)
         }
         }
         }
         //文本節(jié)點(diǎn)、一個(gè)文檔的CDATA部分(沒遇到過這個(gè))
         else if (nodeType === 3 || nodeType === 4) {
         //返回節(jié)點(diǎn)值
         return elem.nodeValue;
         }
         //nodeType:注釋節(jié)點(diǎn) 8,處理指令 7
         //text()方法不處理這兩個(gè)類型節(jié)點(diǎn)
         return ret
         }
         function customEmpty() {
         let elem,
         i = 0;
         //注意for循環(huán)的寫法
         for (; (elem = this[i]) != null; i++) {
         //如果是元素節(jié)點(diǎn)的話,清空該節(jié)點(diǎn)的所有內(nèi)容
         if (elem.nodeType === 1) {
         elem.textContent = "";
         }
         }
         return this;
         }
         function writeText(value) {
         let elem,
         i = 0;
         //先清空目標(biāo)元素的內(nèi)容
         customEmpty.call(this)
         //循環(huán)
         for (; (elem = this[i]) != null; i++) {
         //元素節(jié)點(diǎn),文檔碎片,文檔節(jié)點(diǎn)
         if (elem.nodeType === 1 || elem.nodeType === 11 || elem.nodeType === 9) {
         // text()方法不會(huì)解析標(biāo)簽
         elem.textContent = value;
         }
         }
         //return this 方便鏈?zhǔn)秸{(diào)用
         return this
         }
         function customText(value) {
         return value === undefined ?
         //讀
         readText(this) :
         //寫
         writeText.call(this, value)
         }
         customText.call(document.querySelectorAll('.divOne'))
         customText.call(document.querySelectorAll('.divOne'),"Hello <b>world</b>!")
         // let p=document.createElement('p')
         // p.innerText='哈哈哈'
         console.log($(".divOne").text())
         // customText.call(document.querySelectorAll('.divOne'))
         // console.log(document.querySelectorAll('.divOne').nodeType,'childnode81')
         // console.log(document.querySelectorAll('.divOne')[0].textContent,'childnode81')
         // $("#divOne").text('<p>aaaa</p>')
         // console.log(document.querySelector("#divTwo"))
        </script>
        </body>
        </html>

        總結(jié)

        以上所述是小編給大家介紹的jQuery中實(shí)現(xiàn)text()的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        jQuery中實(shí)現(xiàn)text()的方法

        jQuery中實(shí)現(xiàn)text()的方法:一、有這樣一段 html <div class=divOne> <p>嘿嘿嘿</p> </div> <div class=divOne> <p>哈哈哈</p> </div> 二、jQuery 的 text() 方法 (1)當(dāng)直接調(diào)用 $()
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 四虎永久免费地址在线观看| 在线免费观看色片| 亚洲综合另类小说色区| 青娱乐免费视频在线观看| 国产午夜鲁丝片AV无码免费| 在线精品亚洲一区二区| 成人影片一区免费观看| 亚洲国产另类久久久精品小说| 国产在线观看xxxx免费| 精品久久香蕉国产线看观看亚洲 | 亚洲无圣光一区二区| jzzijzzij在线观看亚洲熟妇| 13小箩利洗澡无码视频网站免费 | 久久亚洲春色中文字幕久久久| 日本黄色动图免费在线观看| 曰皮全部过程视频免费国产30分钟| 成人黄页网站免费观看大全| 亚洲色大网站WWW永久网站| 日本免费一本天堂在线| 四虎国产精品成人免费久久 | 亚洲一区二区三区乱码在线欧洲| 一级毛片免费视频网站| 永久亚洲成a人片777777| 久爱免费观看在线网站| 亚洲香蕉久久一区二区| 国产精品另类激情久久久免费| 国产成人亚洲精品电影| 亚洲宅男天堂在线观看无病毒| 久久精品人成免费| 亚洲国产精品乱码一区二区 | 日日麻批免费40分钟无码| 免费国产草莓视频在线观看黄| 成年人性生活免费视频| h视频在线免费看| 国产成人高清精品免费鸭子| 亚洲欧洲免费视频| av网站免费线看| 亚洲日本一区二区| 国产精品极品美女免费观看| 一个人晚上在线观看的免费视频| 久久丫精品国产亚洲av不卡|