未加星标

jQuery、zepto、js常用小技巧【持续更新】

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二04 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

最近一直在为了房子的事奔波, 好久没更新了...

以下只为记录自己工作常用的片段和心得, 如有问题请指正, 多谢~

jQuery/zepto判断元素是否存在 // 判断长度是否存在, 正确 if ($elem.length) { } // 错误, 因为空数组也是true if ($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="#" 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 来操作了, 你懂的~ ajax的那些事 complete 无论 success 还是 error 都会执行, 并且会该这2个方法之后执行, 常用于重置状态 options.timeout 默认为 0 , 也就是会等待服务器超时, 看源码: jquery-2.2.4.js#L8648-L8652 jsonp = callback+createScript, 因为需要往 window 上挂载, jQuery和zepto的作法是, 先把 window[callbackName] 赋给一个临时变量, 然后让回调设置到 window 上, 使用完后再把临时变量换回, 看源码: jquery-2.2.4.js#L9312-L9328 jQuery的 options.jsonp 默认为 callback , jsonpCallback 默认是 jQuery_时间缀_索引 , 见源码: jquery-2.2.4.js#L9265-L9272 zepto的 options.jsonp 默认为 callback , jsonpCallback 默认是 Zepto索引 (老版本的是 jsonp索引 ), 见源码: zepto-1.2.0.js/ajax.js#L88 options.dataType 为 script, jsonp 时 options.cache 自动关闭, 见源码: jquery-2.2.4.js#L9215-L9222 , zepto-1.2.0.js/ajax.js#L221-L225

下篇博文将写关于 linux 命令、 shell 相关的, 啦啦啦~

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

分页:12
转载请注明
本文标题:jQuery、zepto、js常用小技巧【持续更新】
本站链接:http://www.codesec.net/view/531950.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(135)