jQuery、zepto、js常用小技巧


Posted in Javascript onFebruary 12, 2017

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

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="#" 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 来操作了, 你懂的~
Javascript 相关文章推荐
ImageZoom 图片放大镜效果(多功能扩展篇)
Apr 14 Javascript
JavaScript去掉空格的方法集合
Dec 28 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
JavaScript实现Java中StringBuffer的方法
Feb 09 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
js实现兼容IE、Firefox的图片缩放代码
Dec 08 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
Apr 27 Javascript
jQuery插件pagination实现无刷新分页
May 21 Javascript
详解vue 中使用 AJAX获取数据的方法
Jan 18 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
Aug 27 Javascript
JS中如何实现Laravel的route函数详解
Feb 12 #Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 #Javascript
浅谈js中同名函数和同名变量的执行问题
Feb 12 #Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 #Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 #Javascript
浅谈jQuery中事情的动态绑定
Feb 12 #Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 #Javascript
You might like
PHP抽象类 介绍
2012/06/13 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
Vue header组件开发详解
2018/01/26 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
python和php学习哪个更有发展
2020/06/17 Python
html5 标签
2009/07/16 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
毕业生求职信的经典写法
2014/01/31 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
合作协议书格式
2014/08/19 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
房屋过户委托书范本
2014/10/07 职场文书
离婚协议书范文2014
2014/10/16 职场文书
大学生团日活动总结
2015/05/06 职场文书
导游词之任弼时故居
2020/01/07 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript
Python max函数中key的用法及原理解析
2021/06/26 Python
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis