常用js方法整理(个人)
开头总要有点废话
今天想了下,还是分享下自己平时积累的一些实用性较高的js方法,供大家指点和评价。本想分篇介绍,发现有点画蛇添足。整理了下也没多少拿得出手的方法,自然有一些是网上看到的个人觉得很有实用性的方法,在这里一起贴出来供大家探讨。
代码和介绍
点击返回若没有之前页面则跳转到规定页面
首先是客户需求中要求——单个分享到微信的页面,点击返回可以跳转到网站首页。
期间这个功能有和客户探讨过,能否在页面中添加回到首页按钮进行跳转。
可是这种方式无法作用到每个页面,并且指明需要该功能的分享页面没有可以放得下一个图标,又不影响美观的地方了。于是,本人只好是寻求度娘。度娘上也尽是一些打着擦边球的功能。
所以通过自己的尝试 有了以下代码:

1 //返回之前没页面则返回首页
2 function pushHistory() {
3 //获取浏览器历史记录栈中的记录个数
4 //由于页面加载的时候就会将当前页面压入栈中 所以判断是否小于2
5 if (history.length < 2) {
6 var state = {
7 title: "index",
8 url: getHttpPrefix + "index.html"
9 };
10 window.history.pushState(state, "index", getHttpPrefix + "index.html");
11 state = {
12 title: "index",
13 url: ""
14 };
15 window.history.pushState(state, "index", "");
16 }
17 }

再将下面这段代码加入页面ready事件中:

1 setTimeout(function () {
2 pushHistory()
3 window.addEventListener("popstate", function (e) { 5 if (window.history.state !=null&&window.history.state.url != "") {
6 location.href = window.history.state.url
7 }
8
9 });
10 }, 300);

具体功能就是判断之前是否有页面,若没有就将制定网站的链接地址插入state(这里用的是首页),然后再监听popstate事件,进行相应功能的操作。
这段代码可能还有一些小问题,所以打算是贴出来有人可以一起探讨和完善。
便捷log方法
相信大家页面调试的时候早已经厌烦了console.log()略显啰嗦的敲打长度。有些人可能会使用快捷输入进行快速输入(如:输入cl编译环境智能跳出console)。不过在等到项目发布的时候 看到许多忘记删掉的调试信息,还是会难以清除。所以本人干脆写了个方法 用来专门处理这种情况。

1 function lll() {
2 //全局变量_debug用来控制调试信息开关
3 if (_debug) {
4 var arr = [];
5 //arguments是方法的参数集合 这样做是为了不限制参数的个数,方便调试
6 for (_item in arguments) {
7 //由于个人习惯字符串信息就显示在一行里所以对字符串进行了筛选拼接
8 if (typeof _item == "String") {
9 arr.push(_item)
10 } else {
11 console.log(_item)
12 }
13 }
14 if(arr.length>0)console.log(arr.join(','))
15 }
16 }

其实还有点不满意的就是 没办法自动获取到参数的名字不然就可以这样使用:
1 var a = 123, b = 333, obj = { name: "name", content: "..." }
2 lll(a, b, obj)//调试信息为: a:123,b:123
3 //obj:
4 //{ name: "name", content: "..." }
看起来是不是就更加明白点了?
获取浏览器定位信息(支持移动端)
接到很多的项目都是移动端定制开发的,所以经常会用到需要定位当前地点的信息。
可是网上很多的接口都是需要引用一段外部js的比如百度的api,微信的api等等。
我接下来介绍一种不需要引用外部js,只需要向外部API链接提交参数就可以获取定位的方法:

1 if (getCookie('position') == "") {
2
3 if (navigator.userAgent.indexOf("MicroMessenger") > -1) {//判断是否是微信端,具体视情况而定
4 navigator.geolocation.getCurrentPosition(function getPositionSuccess(position) {
5 //通过html5的navigator.geolocation接口 获取浏览器的当前定位 (移动端最准确,PC会有较大偏差)
6 var lat = position.coords.latitude;//获取过来的当前纬度
7 var lng = position.coords.longitude;//获取过来的当前经度
8 var arr = []
9 arr.push(lng)
10 arr.push(lat)
11 //alert(position)
12 $.ajax({
13 type: "GET",
14 url: "http://api.map.baidu.com/geocoder/v2/?ak=oM55dVWVwLUU7shkz7uY8M6E&callback=renderReverse&location=" + lat + "," + lng + "&output=json&pois=1",//将经纬度通过地址栏参数的形式 传给百度提供的api
15 beforeSend: function () {
16 //由于这段过程需要些时间 所以最好页面上有加载提示
17 iosload()//本人写的页面加载动画
18 },
19 data: {},
20 dataType: "jsonp",//由于是跨域传输 所以需要以jsonp的形式进行传输
21 jsonpCallback: "renderReverse",//类似跨域传输的标识 需要接收方和传输方做好统一
22 success: function (data) {
23 ios.hide();
24 //alert(data)
25 $("#myposition").html("我在:" + data.result.addressComponent.city)
26 setCookie("position", data.result.addressComponent.city, 24 * 60 * 30)
27 }
28 })
29
30 }, function (error) {
31 //alert(error.message);
32 }, {})
33 }
34 }

这段代码是本人实际项目中的一段代码,由于需要判断是否已经获取到定位信息,不能每次页面加载都进行一次获取 所以我用Cookie将定位信息保存了起来
刚开始的时候判断是否有当前的定位信息cookie,没有。再判断是否是在移动端(因为项目是微信端的,所以我这里只是做了微信端的验证)
然后再调用html5提供的接口参数 进行数据传输,将百度返回过来的jsonp进行处理。由于我项目里只需要获取定位的城市信息 所以这里只是举了获取城市的例子。
如果需要其他更加精确的信息 可以访问百度的相应接口文档。
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
获取字符串数值部分
因为项目上我只负责功能的实现,所以很多页面并不是我自己搭的,但是 又会有些生手来搭出一些很不好获取标签内的数值的情况。
比如:
1 <div>原价998现在只要
2 <a>99.8!</a>
3 </div>
像这种页面,有时候要获取里面的998或者98。就会变的有点麻烦。
通过我下面提供的方法,可以很方便的解决这种情况
1 function getNum(text) {
2 var value = text.replace(/[^(0-9).]/ig, "");
3 return parseFloat(value);
4 }
这段方法很简短,实质上就是通过正则去匹配。将非数字或者小数点的字符替换成空的字符串(实际上就是删除)
这样返回过来的数据就是我们想要的数字,我最后又进行了一次转换为浮点型的操作,这是为了方便将数据进行后期处理。比如保留两位小数,四舍五入 等等。
获取设备信息

1 //#region 获取设备信息
2
3 var browser = {
4 versions: function () {
5 var u = navigator.userAgent, app = navigator.appVersion;
6 return {
7 trident: u.indexOf('Trident') > -1, //IE内核
8 presto: u.indexOf('Presto') > -1, //opera内核
9 webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
10 gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
11 mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
12 ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
13 android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
14 iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
15 iPad: u.indexOf('iPad') > -1, //是否iPad
16 webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
17 weixin: u.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增)
18 qq: u.match(/\sQQ/i) == " qq" //是否QQ
19 };
20 }(),
21 language: (navigator.browserLanguage || navigator.language).toLowerCase()
22 }
23
24 //实际使用的时候如下:
25 if (browser.versions.webKit) {
26 //为苹果 谷歌内核执行的代码...
27 }
28
29 //#endregion

这里也是分享一个不是我写的 也是在网上看到的一个封装成对象的判断设备信息的方式。
个人觉得很好用,于是也拿来跟大家分享一下。
字符串扩展方法——以下介绍的都是对String类型数据进行附加的方法
1.将字符串超出指定长度部分隐藏

1 /*
2 将字符串以指定长度显示,多余部分以省略号显示(len--显示长度
3 defaultStr--若字符串为空显示的字符串)
4 */
5 String.prototype.splitString = function (len, defaultStr) {
6 var result = "";
7 var str = this.toString()
8 if (str) {
9 str = str.trim()
10 if (str.length > len) {
11 result = str.substring(0, len) + "...";
12 }
13 else {
14 result = str;
15 }
16 }
17 else {
18 result = defaultStr;
19 }
20 return result;
21 }

注释已经够简单明了了。不理解的可以留言,博主看到一定回复。
2.将字符串长度减一
1 //长度减一
2 String.prototype.delLast = function () {
3 return this.substring(0, this.length - 1)
4 }
有些人可能会觉得 这个方法有点脱裤子放屁的嫌疑,其实真正的项目中 会经常需要这个操作。
与其写一段长长的substring 不如咱们写个方法将代码精简,并且在码代码的时候 也很方便 直接在对应的字符串后面 轻轻一点,选择delLast就行。
一句话,用过都说好!
3.将数字型字符串补全指定长度

1 //给数字型字符串固定指定长度
2 String.prototype.addZero = function (n) {
3 var num = this
4 var len = num.toString().length;
5 while (len < n) {
6 num = '0' + num;
7 len++;
8 }
9 return num;
10 }

看注释可能有点不理解 其实就是加入这个字符串是 "2",通过这个扩展方法 可以这么操作 "2".addZero(2)
那么返回过来的就是"02"这样的字符串。
用过都说好!
4.将数据库DateTime类型转换为Date
1 String.prototype.DTD = function () {
2 return new Date(Date.parse(this.toString().replace(/-/g, "/")))
3 }
5.用户昵称省略
1 //用户昵称省略
2 String.prototype.telHide = function () {
3 var name = this
4 return name.substr(0, 1) + "****" + name.substring(name.length - 1, name.length)
5 }
常用js方法整理(个人)的更多相关文章
- 常用js方法整理common.js
项目中常用js方法整理成了common.js var h = {}; h.get = function (url, data, ok, error) { $.ajax({ url: url, data ...
- 项目中常用js方法整理common.js
抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...
- 常用JS方法整理
目录: 截取指定字节数的字符串 判断是否微信 获取时间格式的几个举例 获取字符串字节长度 对象克隆.深拷贝 组织结构代码证验证 身份证号验证 js正则为url添加http标识 URL有效性校验方法 自 ...
- 常用js方法
function dateGetter(name, size, offset, trim) { offset = offset || 0; return function (date) { var v ...
- 常用js方法封装
常用js方法封装 var myJs = { /* * 格式化日期 * @param dt 日期对象 * @returns {string} 返回值是格式化的字符串日期 */ getDates: fun ...
- 常用js代码整理、收集
个人整理了一下个人常用到的一些js代码,以方便学习以及日后使用,或许有一些是个人之前从网上摘下来的,但是不记得是具体从哪里来的了,如果你看到有一段代码跟你的文章很相似甚至一样,请不要气愤,请告诉我,我 ...
- Dynamics CRM 常用 JS 方法集合
JS部分 拿到字段的值 var value= Xrm.Page.getAttribute("attributename").getValue(); Xrm.Page.getAttr ...
- JavaScript中一些常用的方法整理
当前时间和输入时间比较 var timeLong = Date.parse(new Date());//当前时间var t1 = Date.parse($("#returnTime2&quo ...
- JavaScript 深入学习及常用工具方法整理 ---- 01.浮点数
在JavaScript中是不区分整数值和浮点数值的,其中所有的数字均用浮点数值表示.JavaScript采用IEEE 754标准(有兴趣可以浏览网络规范分类下的IEEE 754标准,需要原文件请在留言 ...
随机推荐
- macos 安装sublime text 3,如何安装插件
1. 上面的代码如下: import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1 ...
- Linux 中磁盘容量配额
linux的设计之处就是为了多用户同时执行不同的任务,但是硬件资源是有限的,不能让一个用户无限制的上传文件,如果不加以限制,那么磁盘最终将会被充满,对此我们应该使用uquota来加以限制. 1.quo ...
- [20190415]10g下那些latch是共享的.txt
[20190415]10g下那些latch是共享的.txt http://andreynikolaev.wordpress.com/2010/11/23/shared-latches-by-oracl ...
- SQL Server 数据库状态选项-用户使用
选项 1. single_user(单用户),multi_user(多用户),restricted_user(受限用户); 描述数据库的用户访问属性,它们互斥,设置其中任何一个选项就会取消对其它选项的 ...
- Bootstrap -- 表格样式、表单布局
Bootstrap -- 表格样式.表单布局 1. 表格的一些样式 举例: <!DOCTYPE html> <html> <head> <meta http- ...
- Java基础——1 一切都是对象
- SQL NULL 值
NULL 值是遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不 ...
- Navicat Premium 12.0.18安装与激活
因为要学习测试,postgresql , 没弄过所以用这个软件... https://www.jianshu.com/p/42a33b0dda9c
- Linux:Day10 程序包管理
YUM:yellow dog,Yellowdog Update Modifier yum repository:yum repo 存储了众多rpm包,以及包的相关的无数据文件(放置于特定目录下:rep ...
- pip 升级 pip
For Python2 sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade pip For Python3 ...