jQuery、zepto、js常用小技巧
以下只為記錄自己工作常用的片段和心得, 如有問題請(qǐng)指正, 多謝~
jQuery/zepto判斷元素是否存在
// 判斷長(zhǎng)度是否存在, 正確
if ($elem.length) {
}
// 錯(cuò)誤, 因?yàn)榭諗?shù)組也是true
if ($elem) {
}
合理判斷數(shù)據(jù)類型
先看代碼:
function case(str) {
return str.match(/reg/);
}
看著沒問題, 但當(dāng) str 為空(false, null等)時(shí)就掛了, 適當(dāng)?shù)臋z查讓代碼更健壯, 如:
function case(str) {
return "string" === typeof str ? str.match(/reg/) : null;
// 或者強(qiáng)制轉(zhuǎn)換下
return String(str).match(/reg/);
}
function case2(callback) {
if ("function" === typeof callback) {
callback();
}
}
再比如, 要獲取地址欄的參數(shù):
function getQuery(key) {
// 不論頁面鏈接有沒有querystring, location.search都會(huì)是字符串
// substr為了忽略?號(hào)
var result = location.search.substr(1).match(new RegExp("(?:^|&)" + key + "=(.+?)(?:$|&)"));
// 如果匹配成功為數(shù)組
return result ? result[1] : result;
}
因?yàn)橐袛嘟Y(jié)果是否存在從而多了個(gè)變量 result , 然而可以使用默認(rèn)值替換:
function getQuery(key) {
return (location.search.substr(1).match(new RegExp("(?:^|&)" + key + "=(.+?)(?:$|&)")) || ["", "我是默認(rèn)值, 因?yàn)榍懊鏋榭站偷轿伊?])[1];
}
合理try,catch
在正常情況下不推薦使用 try , 但在一些未知情況下建議使用, 比如: 異步接口成功后的數(shù)據(jù)結(jié)構(gòu)太多:
// 原判斷
success: res => {
// zepto里空的200響應(yīng)也會(huì)觸發(fā)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 {
// 數(shù)據(jù)處理出錯(cuò)
}
}
艾瑪, 判斷那么長(zhǎng), 但不判斷直接用可能會(huì)報(bào)js錯(cuò), 于是:
// 原判斷
success: res => {
try {
// 嘗試使用, 當(dāng)報(bào)錯(cuò)時(shí)進(jìn)入下面分支
res.data.result[0].list.forEach();
}
catch (e) {
// 數(shù)據(jù)處理出錯(cuò)
}
}
合理使用dataset
dataset 是指在 html 元素中添加的以 data-* 為名稱的屬性字段
點(diǎn)擊查看 兼容性
使用 DOM.dataset 獲取元素的 DOMStringMap對(duì)象 , 可以直接 DOM.dataset.key = value 賦值和 delete DOM.dataset.key 刪除, 如: document.body.dataset.xxoo = 1
常用于存放一些自定義數(shù)據(jù), 如: <a href="#" rel="external nofollow" data-uid="1" data-name="xxoo">我是一個(gè)兵</a>
語義化更強(qiáng)
.data, .attr, .prop, dataset的區(qū)別
注: .data, .attr, .prop是 jQuery, zepto 的方法
| 名稱 | 描述 | 是否顯示在dom樹上 |
|---|---|---|
| attr | 操作 dom.getAttribute |
是 |
| prop | 操作元素的 dom 屬性, 常用于選中 selected, checked 、禁用 disabled 等 |
否 |
| dataset | 操作元素的節(jié)點(diǎn)數(shù)據(jù) | 是 |
對(duì)于 .data 跟庫的有關(guān), 如:
| 名稱 | 描述 | 是否顯示在dom樹上 |
|---|---|---|
| jQuery | .data(key) - 先判斷緩存對(duì)象, 不存在則獲取 attr('data-key') 并寫入緩存到 $.cache[id].data[key] .data(key, value) - 設(shè)置緩存 |
否 |
| zepto | 直接使用 .attr('data-' + key, value) |
是 |
zepto - 加載 data.js |
.data(key) - 先判斷緩存對(duì)象, 不存在則獲取 attr('data-key') .data(key, value) - 設(shè)置緩存 |
否 |
相關(guān)文章
在JavaScript的jQuery庫中操作AJAX的方法講解
這篇文章主要介紹了在JavaScript的jQuery庫中操作AJAX的方法講解,包括利用jQuery簡(jiǎn)化Ajax開發(fā)部分的內(nèi)容,需要的朋友可以參考下2015-08-08
基于jQuery通過jQuery.form.js插件實(shí)現(xiàn)異步上傳
這篇文章主要介紹了基于jQuery通過jQuery.form.js插件實(shí)現(xiàn)異步上傳,代碼很詳細(xì),感興趣的小伙伴們可以參考一下2015-12-12
基于jquery實(shí)現(xiàn)的可編輯下拉框?qū)崿F(xiàn)代碼
昨天看到QQ登錄的時(shí)候,可以選擇以前登錄過的賬戶,這個(gè)東西也可以在網(wǎng)站登錄的時(shí)候用到,所以我就想做一個(gè)這樣的插件;在網(wǎng)上查了很多,沒有找到合適自己的,所以決定自動(dòng)制作一個(gè)2014-08-08
jquery實(shí)現(xiàn)自定義樹形表格的方法【自定義樹形結(jié)構(gòu)table】
這篇文章主要介紹了jquery實(shí)現(xiàn)自定義樹形表格的方法,結(jié)合實(shí)例形式分析了jQuery創(chuàng)建自定義樹形結(jié)構(gòu)table的相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
jquery清空input標(biāo)簽的值及清除標(biāo)簽里面的內(nèi)容
jQuery插件scroll實(shí)現(xiàn)無縫滾動(dòng)效果
validationEngine 表單驗(yàn)證插件使用實(shí)例代碼
Jquery Ajax xmlhttp請(qǐng)求成功問題

