日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JQueryData方法的一個小特技

通常我們在用 JavaScript 操作 DOM 元素的時候會往 DOM 上臨時添加一些參數(shù),用來記住一些狀態(tài),或者從后端取參數(shù)值等。

創(chuàng)新互聯(lián)公司從2013年開始,先為汶上等服務(wù)建站,汶上等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為汶上企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

一般通過在 HTML 標(biāo)簽上添加自定義屬性來實現(xiàn),但是這樣會不可避免的訪問 DOM,性能上并不好。如果你使用 jQuery 的話建議使用 $el.data() 方法來取元素上 data-* 的值,比如:

 
 
 
 
  •  
  • 這兩個方法的區(qū)別在于 attr 每次都會直接訪問 DOM 元素,而 data 方法會緩存***次的查找,后續(xù)調(diào)用不需要訪問 DOM。

    很明顯建議使用后者,但是在 低版本的 jQuery 中默認(rèn)會對 data 方法取到的值進(jìn)行粗暴的強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換「parseFloat」??聪旅娲a:

     
     
     
    1. 字符串
     
  • 數(shù)字
  •  
  • 科學(xué)計數(shù)法
  •  
  • 八進(jìn)制數(shù)字
  •  
  •  
  •  
  • 后面兩種顯然出錯了,就是因為 jQuery 對屬性值進(jìn)行了強(qiáng)制 parseFloat 操作。這種轉(zhuǎn)換是方便了使用者,如果是數(shù)字的話我們?nèi)〉竭@個值進(jìn)行計算什么的就不用再轉(zhuǎn)數(shù)據(jù)類型了,但是一不小心就會出 bug

    發(fā)現(xiàn)這個 bug 的時候***感覺是 jQuery 不應(yīng)該沒考慮到這一點呀。后來果斷去查了下***版的 jQuery 源代碼,發(fā)現(xiàn)已經(jīng)修復(fù)了。核心代碼在 data.js 35 行,如下

     
     
     
    1. function getData( data ) { 
    2.     if ( data === "true" ) { 
    3.         return true; 
    4.     } 
    5.  
    6.     if ( data === "false" ) { 
    7.         return false; 
    8.     } 
    9.  
    10.     if ( data === "null" ) { 
    11.         return null; 
    12.     } 
    13.  
    14.     // Only convert to a number if it doesn't change the string 
    15.     // 重點就在這里 →_→ 
    16.     if ( data === +data + "" ) { 
    17.         return +data; 
    18.     } 
    19.  
    20.     if ( rbrace.test( data ) ) { 
    21.         return JSON.parse( data ); 
    22.     } 
    23.  
    24.     return data; 

    getData 方法就返回了節(jié)點屬性的值,只不過加了一些特殊處理使得我們?nèi)〉搅藳]有 bug 的值,關(guān)鍵地方就在這里: data === +data + "" 。這行代碼做了些什么神奇的事情

    將節(jié)點的屬性值強(qiáng)制轉(zhuǎn)換成數(shù)字「+data」后再轉(zhuǎn)成字符串「+ ““」,如果轉(zhuǎn)換后的值與原來相等就取轉(zhuǎn)換后的值

    可以簡單的這么理解:jQuery 會嘗試轉(zhuǎn)換數(shù)據(jù)類型,如果轉(zhuǎn)換后和轉(zhuǎn)換前的 長得一樣 那么 jQuery 就認(rèn)為它是需要被轉(zhuǎn)換成數(shù)字的。這樣就可以***規(guī)避上面例子中的兩種問題,我們來測試一下:

     
     
     
    1. var data = 'abc' 
    2. console.log(data === +data + "")        // false 不轉(zhuǎn)換,直接返回字符串原值 
    3.  
    4. var data = '123' 
    5. console.log(data === +data + "")        // true 轉(zhuǎn)換,使用轉(zhuǎn)換后的數(shù)字類型值 
    6.  
    7. var data = '123e456' 
    8. console.log(data === +data + "")        // false 不轉(zhuǎn)換,直接返回字符串原值 
    9.  
    10. var data = '0000123' 
    11. console.log(data === +data + "")        // false 不轉(zhuǎn)換,直接返回字符串原值 

    【本文是專欄作者周琪力的原創(chuàng)稿件,轉(zhuǎn)載請注明出處】


    本文標(biāo)題:JQueryData方法的一個小特技
    網(wǎng)站網(wǎng)址:http://m.5511xx.com/article/dppcjos.html