国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery、zepto、js常用小技巧

2019-11-19 17:37:40
字體:
來源:轉載
供稿:網友

以下只為記錄自己工作常用的片段和心得, 如有問題請指正, 多謝~

jQuery/zepto判斷元素是否存在

// 判斷長度是否存在, 正確if ($elem.length) {}// 錯誤, 因為空數組也是trueif ($elem) {}

合理判斷數據類型

先看代碼:

function case(str) {  return str.match(/reg/);}

看著沒問題, 但當 str 為空(false, null等)時就掛了, 適當的檢查讓代碼更健壯, 如:

function case(str) {  return "string" === typeof str ? str.match(/reg/) : null;  // 或者強制轉換下  return String(str).match(/reg/);}function case2(callback) {  if ("function" === typeof callback) {    callback();  }}

再比如, 要獲取地址欄的參數:

function getQuery(key) {  // 不論頁面鏈接有沒有querystring, location.search都會是字符串  // substr為了忽略?號  var result = location.search.substr(1).match(new RegExp("(?:^|&)" + key + "=(.+?)(?:$|&)"));  // 如果匹配成功為數組  return result ? result[1] : result;}

因為要判斷結果是否存在從而多了個變量 result , 然而可以使用默認值替換:

function getQuery(key) {  return (location.search.substr(1).match(new RegExp("(?:^|&)" + key + "=(.+?)(?:$|&)")) || ["", "我是默認值, 因為前面為空就到我了"])[1];}

合理try,catch

在正常情況下不推薦使用 try , 但在一些未知情況下建議使用, 比如: 異步接口成功后的數據結構太多:

// 原判斷success: res => {  // zepto里空的200響應也會觸發success  if (res && res.data && res.data.result && res.data.result[0] && res.data.result[0].list && res.data.result[0].list.length) {    // 成功    res.data.result[0].list.forEach();  }  else {    // 數據處理出錯  }}

艾瑪, 判斷那么長, 但不判斷直接用可能會報js錯, 于是:

// 原判斷success: res => {  try {    // 嘗試使用, 當報錯時進入下面分支    res.data.result[0].list.forEach();  }  catch (e) {    // 數據處理出錯  }}

合理使用dataset

dataset 是指在 html 元素中添加的以 data-* 為名稱的屬性字段
點擊查看 兼容性
使用 DOM.dataset 獲取元素的 DOMStringMap對象 , 可以直接 DOM.dataset.key = value 賦值和 delete DOM.dataset.key 刪除, 如: document.body.dataset.xxoo = 1
常用于存放一些自定義數據, 如: <a href="#" rel="external nofollow" data-uid="1" data-name="xxoo">我是一個兵</a>
語義化更強
.data, .attr, .prop, dataset的區別

注: .data, .attr, .prop是 jQuery, zepto 的方法

名稱 描述 是否顯示在dom樹上
attr 操作 dom.getAttribute
prop 操作元素的 dom 屬性, 常用于選中 selected, checked 、禁用 disabled 
dataset 操作元素的節點數據

對于 .data 跟庫的有關, 如:

名稱 描述 是否顯示在dom樹上
jQuery .data(key) - 先判斷緩存對象, 不存在則獲取 attr('data-key') 并寫入緩存到 $.cache[id].data[key] 
.data(key, value) - 設置緩存
zepto 直接使用 .attr('data-' + key, value)
zepto - 加載 data.js .data(key) - 先判斷緩存對象, 不存在則獲取 attr('data-key') 
.data(key, value) - 設置緩存
有以上結論了, 那么可以根據自己的場景選擇了, 比如在 css 里有使用 div[data-xx='1'] {} 這樣的選擇器來控制樣式, 那么就得使用 .attr() 或者 dataset 來操作了, 你懂的~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 齐齐哈尔市| 清水河县| 通江县| 花垣县| 扎赉特旗| 敖汉旗| 靖远县| 西峡县| 洱源县| 海伦市| 射阳县| 宝丰县| 侯马市| 青海省| 九江市| 汽车| 林芝县| 奉节县| 平南县| 和政县| 油尖旺区| 石棉县| 华蓥市| 玛沁县| 城固县| 陇西县| 虹口区| 济阳县| 体育| 定日县| 平安县| 盐池县| 泸水县| 双峰县| 桂平市| 博湖县| 怀远县| 濮阳市| 苍山县| 巴里| 五台县|