国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JQuery Data方法的一個小特技

開發 開發工具
通常我們在用 JavaScript 操作 DOM 元素的時候會往 DOM 上臨時添加一些參數,用來記住一些狀態,或者從后端取參數值等。

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

[[190918]]

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

  1. <div id="demo" data-key="value"></div> 
  2. <script> 
  3.     $('#demo').attr('data-key') 
  4.     $('#demo').data('key')  // ***次訪問 DOM,以后從緩存取 
  5. </script> 

這兩個方法的區別在于 attr 每次都會直接訪問 DOM 元素,而 data 方法會緩存***次的查找,后續調用不需要訪問 DOM。

很明顯建議使用后者,但是在 低版本的 jQuery 中默認會對 data 方法取到的值進行粗暴的強制數據類型轉換「parseFloat」。看下面代碼:

  1. <div id="demo0" data-key="abc">字符串</div> 
  2. <div id="demo1" data-key="123">數字</div> 
  3. <div id="demo2" data-key="123e456">科學計數法</div> 
  4. <div id="demo3" data-key="0000123">八進制數字</div> 
  5. <script src="jquery-1.6.4"></script> 
  6. <script> 
  7.     $('#demo0').data('key')  // "abc" 
  8.     $('#demo1').data('key')  // 123 
  9.     $('#demo2').data('key')  // Infinity 
  10.     $('#demo3').data('key')  // 83 
  11. </script> 

后面兩種顯然出錯了,就是因為 jQuery 對屬性值進行了強制 parseFloat 操作。這種轉換是方便了使用者,如果是數字的話我們取到這個值進行計算什么的就不用再轉數據類型了,但是一不小心就會出 bug

發現這個 bug 的時候***感覺是 jQuery 不應該沒考慮到這一點呀。后來果斷去查了下***版的 jQuery 源代碼,發現已經修復了。核心代碼在 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 方法就返回了節點屬性的值,只不過加了一些特殊處理使得我們取到了沒有 bug 的值,關鍵地方就在這里: data === +data + "" 。這行代碼做了些什么神奇的事情

將節點的屬性值強制轉換成數字「+data」后再轉成字符串「+ ““」,如果轉換后的值與原來相等就取轉換后的值

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

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

【本文是51CTO專欄作者周琪力的原創稿件,轉載請注明出處】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2021-08-11 18:23:08

數據平臺IT

2011-05-27 17:51:00

Android

2025-05-20 08:00:00

鏈式調用異步

2009-06-11 10:59:19

netbeans提示

2009-07-06 18:28:26

Java Socket

2017-04-26 14:48:01

Chrome程序擴展

2021-04-19 11:16:17

小程序微信開發

2011-10-19 09:30:23

jQuery

2012-08-07 11:28:13

卸載linux

2020-06-01 12:47:12

戴爾

2024-05-16 12:03:54

Python代碼開發

2020-08-12 22:03:17

JavaScript開發技術

2012-12-07 10:04:58

管理項目管理日常管理

2009-09-01 16:03:32

C#單元測試

2016-11-23 18:13:44

javascriptrxjsreactivex

2024-05-08 07:40:20

ChatGPT訓練數據預測

2023-09-19 23:21:48

Python列表

2016-09-27 17:29:23

騰訊云小程序微信

2012-11-19 11:07:42

IBMdw

2011-05-25 15:34:17

jQueryJSON
點贊
收藏

51CTO技術棧公眾號

亚洲色欲色欲www| 污网站免费在线观看| 国产一区香蕉久久| 精品中文字幕视频| 影音先锋日韩有码| 日韩视频永久免费观看| 亚洲男人天堂久| 欧美精品1区2区3区| ㊣最新国产の精品bt伙计久久| 国产精品v一区二区三区| 激情av在线| 九草视频在线观看| 男女羞羞网站| 高清国产一区二区三区四区五区| 国产一区二区中文字幕| 日韩欧美中文免费| 国产电影一区二区三区| 精品中文一区| 嫩草精品影院| 久久久最新网址| 亚洲免费观看高清完整版在线 | youjizz久久| 国产精品入口66mio| 羞羞视频立即看| 久久久国产影院| 日日噜噜夜夜狠狠视频欧美人 | 日韩精品福利片午夜免费观看| 成人动漫网站在线观看| 粉嫩一区二区三区四区公司1| 欧美色图另类| 亚洲尤物在线视频| 成年人在线观看网站| 欧美日韩在线精品一区二区三区激情综| 成人免费xx| 在线视频资源站| 99热播在线观看| 91嫩草在线播放| 在线视频国产三级| 你懂得网站在线| 亚洲成人三级| 色www永久免费视频首页在线| 国产视频在线播放| 日本乱码一区二区三区不卡| 丁香花在线电影小说观看 | 性chinese极品按摩| 国产超碰在线播放| 超碰在线图片| 69成人在线| 免费在线成人激情电影| 波多野结衣欧美| 日韩一区电影| 老司机午夜精品视频| 99综合电影在线视频| 亚洲国产成人在线| 色94色欧美sute亚洲线路一久| 欧美日韩成人综合天天影院 | 国产一区二区三区中文 | 99爱精品视频| 日韩高清国产一区在线观看| 中文字幕乱码一区二区三区 | 国产日韩一区二区| 青娱乐一区二区| 国产91在线亚洲| 日韩日韩日韩日韩| 欧美人与禽猛交乱配| 136福利精品导航| 国产精品分类| av激情综合网| 欧美日韩亚洲不卡| 高清一区二区三区四区五区| 99re在线视频观看| 欧美三级一级片| 国产精品ⅴa有声小说| 成人1区2区| 亚洲日产国产精品| 99精品视频在线播放观看| 亚洲激情第一区| 亚洲精品视频在线观看视频| 国产精品视频自拍| 波多野结衣家庭教师在线播放| 尤物在线视频| 日韩美女精品| 九九国产精品视频| 在线精品视频一区二区| 欧美成人久久久| 一本一道久久a久久精品综合| 欧美艹逼视频| 国产精品一区二区精品视频观看| 激情欧美丁香| 亚洲国产综合人成综合网站| 久国内精品在线| av 日韩 人妻 黑人 综合 无码| av网站无病毒在线| 国产成人精品一区二区免费看京 | 成人日韩在线电影| 91在线视频观看免费| a级大胆欧美人体大胆666| 第四色成人网| 亚洲色图欧洲色图婷婷| 中文字幕日韩欧美在线| 亚洲国产高清国产精品| www.亚洲视频| 一本精品一区二区三区| 亚洲午夜国产一区99re久久| 欧美激情国产精品| 波多野结衣家庭教师在线| 91九色在线播放| 日韩视频中文| 日本韩国欧美三级| 日韩在线免费高清视频| 日韩av一级大片| 第一中文字幕在线| 91视频国产资源| 国产ts人妖一区二区三区| 色鬼7777久久| 在线播放亚洲| 亚洲级视频在线观看免费1级| 色婷婷777777仙踪林| 欧美aaaaaa| 亚洲婷婷综合久久一本伊一区 | 欧美最猛性xxxx| jizz视频在线观看| 免费在线一区观看| 久久久久久欧美| 欧美拍拍视频| 丁香婷婷综合五月| 国产成+人+综合+亚洲欧洲| 九色在线播放| 国产精品中文字幕一区二区三区| 中文字幕日韩欧美在线| 成人av在线亚洲| 国产一级片91| 亚洲s色大片| 日韩高清成人| 国产精品草草| 26uuu久久综合| 亚洲色图校园春色| 精品午夜一区二区三区| 久久手机免费观看| 国产精品zjzjzj在线观看| 婷婷综合激情| 国产亚洲婷婷免费| 亚洲精品视频免费在线观看| 亚洲福利视频网| 91色中文字幕| 97caopron在线视频| 久久精品免费观看| 欧美在线不卡区| 日本亚洲欧美| 国产日产欧产精品推荐色| 欧美国产一区二区在线| 国产精品亚洲片在线播放| 揄拍成人国产精品视频| 日本乱理伦在线| 精品国产99久久久久久| 欧美激情综合在线| 成人免费在线视频播放| 日本强好片久久久久久aaa| 国产精选在线观看91| 精品国产a一区二区三区v免费| 国产精品日韩专区| 大型av综合网站| 日韩美女在线播放| 欧美91视频| 精品欧美国产| 99在线|亚洲一区二区| 国产视频99| 久久婷婷亚洲| www.九色.com| bt欧美亚洲午夜电影天堂| 亚洲日本欧美在线| 午夜在线视频一区二区区别| 国产精品久久综合av爱欲tv| 麻豆精品在线| 亚洲色图日韩av| 欧美动物xxx| 国产亚洲精品久久| 国产日韩另类视频一区| 精品视频久久久久久久| 日韩毛片久久久| 欧美视频在线看| 欧美三级黄网| 欧美一级免费大片| fc2ppv国产精品久久| 欧美日韩日日摸| 2020国产在线视频| 亚洲黄色免费三级| 美女91在线| 色婷婷亚洲精品| 久久撸在线视频| 精品91久久久久| 久热国产精品视频一区二区三区| 亚洲人一二三区| 久久久国产精品入口麻豆| 国产精品久久久影院| 在线免费不卡电影| 精品少妇无遮挡毛片| 亚洲一区二区三区四区五区午夜 | 久久亚洲不卡| 国产盗摄视频在线观看|