JS、JQ相关小技巧积攒
JS、JQ相关小技巧积攒,以备不时之需。
1.js 获取时间差:时间戳相减。new Date().getTime() 获得毫秒数,除以(1000*60*60*24) 获得天数。
2.重定向操作:页面重定向:window.location.href="http://..."即可(本页页面跳转)。
3.js立即执行函数,window.onload = function, $(document).ready({})区别 以及 执行时机 以及 先后顺序。
4.前台form表单的提交方式有很多种,例如:
1. form表单submit直接提交的方法
2. Ajax提交的方法 $("form").serialize() 不能提交file文件,如果要表单元素的值包含到序列字符串中,元素必须使用 name 属性
3. jquery提交的方法
4. 原生js提交的方法 document.forms["importFileForm"].submit();
5. 提交附件
前端用 FormData
var formdata = new FormData();
formdata.append("key","value");
如果提交form则 var formdata = new FormData($("#form1")[0]); // 注意构造器参数是Dom对象不是jq对象
后端用 FormCollection
public ActionResult xxaction(FormCollection form)
{
var xx = form["xx"] + "";
//获取客户端上传的文件集合,即使没有附件上传files.Count也大于0,只要表单存在<input type='file' />
HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
}
Ajax使用FormData向后台传参数时,在ajax参数中加上:
contentType:false,
processData:false
6. js通配符选择器:
^= 以什么开头
$= 以什么结尾
*= 包含什么
7. js数组与字符串相互转换
数组转字符串:var arr = new Array(a,b,c,d); arr.join(",");
字符串转数组:var str = "abcd"; str.split("");
8. 数组添加元素
var arr = [];
arr.push():// 元素插入数组尾部,返回数组新长度
arr.unshift(): //元素插入数组头部,返回数组新长度
arr.splice(index,item)://元素插入数组指定索引处
9.
$.get("/QM_Price/CheckAtcost",{ "vrid": $("#bjmb").attr("vrid") },function (data) { if (data == "Y") { noAtcost = false; }});
$.post()
都是异步提交,所以要立即用返回值的情况不能使用此种方法,需要用ajax的同步提交async:false;
10. 数组与对象深拷贝 产生副本的是深拷贝,传递本身的是浅拷贝
数组:
浅拷贝:
var arr1 = [1,2,3,4];
var arr2 = arr1;
console.log(arr2) // [1,2,3.4];
arr1[1] = 5;
console.log(arr2) // [1,5,3,4];
深拷贝:
var arr2 = arr1.slice(0); // 选择一个数组并返回一个副本
slice(start,end) start必填,end不填默认是数组结尾 上式表示将数组元素都选了。
var arr2 = [].concat(arr1);// 连接一个空数组并返回一个副本
concat参数可以是任意多个数组或者值 arr1.concat(4,5)的值为 [1,2,3,4,4,5];
对象:
浅拷贝:
var obj1 = {"name":"a","age":10};
var obj2 = obj1;
obj1["name"] = "b";
console.log(obj2.name) // "b"
深拷贝:
obj2 = JSON.parse(JSON.stringify(obj1)) ;// 格式化输出对象
JSON.stringify():格式化json字符串,有三个参数:
value:值,需要格式化的json串
raplace:可选,可以是方法,也可以是数组,一般写null,作用:可以对json串进行操作,比如大小写转换
space:分隔符,数字0-10表示缩进几个字符。转义字符:\t表示回车。字符串,表示用什么分割
JSON.parse():将json字符串转换成对象
11. 筛选器问题
$("input[name='xx'][id='yy']") 两个[]连一起,表示的是求交集——a且b
$("input[name='xx'],input[name='yy']") 逗号表示并集——a或b(a和b)
12. iE浏览器兼容性问题:
不支持 => 表达式,所以不能用forEach()方法来遍历数组,拉姆达表达式是ES6的东西
不支持 ` 符号(模板字符串),js字符串多行问题。这个是ES6的特性
字符串多行问题解决:\ 使用反斜杠,如果写html片段,注意里面的属性值用单引号 ' ,用到双引号的地方使用 \" 来转义。
13. hasOwnProperty(key):判断一个对象里是否包含该key值。
14. jQuery.extend(true, {}, data[i]):对象深拷贝
15.查看项目种jq 的版本:alert('jQuery版本:' + $.fn.jquery); 是否引入了jq:typeof jQuery == undefined
16. jq.html() 方法,返回元素的html,不包括本身,第一个子元素的html。
17. $.fn.load = function(params...){},重写jquery的load函数。
fn是函数的原型成员,在js中,每个函数都有两个对象,一个是函数对象,即函数本身,一个是原型对象。函数的prototype方法指向这个原型对象。
18. var start = new Date($("#BeginDate").datebox("getValue").replace(/-/g, "/"));// ‘-’在ie浏览器中不能被识别成日期格式在chrome中可以。 ‘/’浏览器通用。
19. js中浮点型的0 等于 "",等于false
var a = 0;
console.log(a == "") // true
console.log(a == false) // true
20. jq offset():只能得到display不为none的元素的值,为none则offset():{top:0,left:0}
21. ajax提交后台的时候,数组无法直接提交,提交后后台得不到数组或者字符串,得到一个null,用JSON.stringify(); 或者:traditional: true。
22. ie浏览器缓存问题:ajax每次请求后台时请求参数相同时,浏览器缓存机制会不再次请求后台,直接读取上一次的数据,所以每次改一下请求参数即可:
data: {
param: Math.random()// ie浏览器缓存,每次请求参数不一致即可
}
23. form表单里面的button 点击不刷新页面 type='button'
24. NaN 、"" 、 0 、false 、null 、undefined 这6个值是js的6个假值,取反都是true,除了这几个,其它都是false。
25. history.back();--点击浏览器的回退按钮
history.go(-1);--等同于history.back(),
如果想要回退的同时再刷新以下页面,则以上方法不可取,可用以下方法:
window.location.href=document.referrer
26.判断ie版本:
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)"
var useragent = navigator.userAgent;//浏览器自带字串
var re = new RegExp("MSIE (\\d+\\.\\d+)");
re.test(useragent);
RegExp.$1;
RegExp 是javascript中的一个内置对象。为正则表达式,RegExp.$1(RegExp["$1"])是RegExp的一个属性,指的是与正则表达式匹配的第一个子匹配(以括号为标志)字符串:
var r= /^(\d{4})-(\d{1,2})-(\d{1,2})$/; //正则表达式 匹配出生日期(简单匹配)
r.exec('1985-10-15');
s1=RegExp.$1;
s2=RegExp.$2;
s3=RegExp.$3;
alert(s1+" "+s2+" "+s3)//结果为1985 10 15
正则里有一个 lastIndex 的属性,是下一次匹配的开始位置,test()匹配之后,lastIndex的值是下一次匹配开始的位置
27.判断是否ie
if ("ActiveXObject" in window) {
console.log("你是ie..");
} else {
console.log("你不是");
}
28.判断是否ie,并且返回版本信息
function IEVersion() {
// 取得浏览器的userAgent字符串
var userAgent = navigator.userAgent;
// 判断是否为小于IE11的浏览器
var isLessIE11 = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1;
// 判断是否为IE的Edge浏览器
var isEdge = userAgent.indexOf('Edge') > -1 && !isLessIE11;
// 判断是否为IE11浏览器
var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;
if (isLessIE11) {
var IEReg = new RegExp('MSIE (\\d+\\.\\d+);');
// 正则表达式匹配浏览器的userAgent字符串中MSIE后的数字部分,,这一步不可省略!!!
IEReg.test(userAgent);
// 取正则表达式中第一个小括号里匹配到的值
var IEVersionNum = parseFloat(RegExp['$1']);
if (IEVersionNum === 7) {
// IE7
return 7
} else if (IEVersionNum === 8) {
// IE8
return 8
} else if (IEVersionNum === 9) {
// IE9
return 9
} else if (IEVersionNum === 10) {
// IE10
return 10
} else {
// IE版本<7
return 6
}
} else if (isEdge) {
// edge
return 'edge'
} else if (isIE11) {
// IE11
return 11
} else {
// 不是ie浏览器
return -1
}
}
29. 是否声明DTD:
控制台输入:document.compatMode
显示 CSS1Compat:已声明
30.http跨域+cookie跨域名
http跨域:
什么是跨域请求?
浏览器同源策略的限制(访问同源的资源是被浏览器允许的,但是如果访问不同源的资源,浏览器默认不允许。访问不同源的资源就叫做跨域)
什么是同源策略(Same Origin Policy)?
同源策略,是浏览器的一种核心最基本的安全策略。它对来之不同远的文档或脚本对当前文档的读写操作做了限制。
同源,即协议相同,域名相同,端口相同
为什么会有跨域问题?
跨域问题只出现在浏览器访问的页面,因为这是浏览器为了保户用户安全而制造的策略。假如没有这层保护,网站就很容易受到跨站伪造请求(CSRF)的攻击
浏览器cookie 不能跨域名,而不是不能跨域,即同一个IP地址,不同端口(跨域)共享一个cookie。
JS、JQ相关小技巧积攒的更多相关文章
- js 数组去重小技巧
js 数组去重小技巧 Intro 今天遇到一个问题,需要对数据进行去重,想看一下有没有什么比较方便的方法,果然有些收获. Question 问题描述: 我有一个这样的数据: [ { "Pro ...
- js几个小技巧和坑
蝴蝶书看了,也知道充满了毒瘤和糟粕,但该用还是得用. 实际写了几天,小技巧记录下来.都是在py里有直接答案,不会遇到的问题,没想到js里这么费事. 还是要多读<ES6标准入门> 1判断ob ...
- js相关小技巧
1.清空type=file的input文件上传控件的内容,相当于重置.txtFile是该input的id $("#txtFile").val(""); $(&q ...
- 开发使用Node.js的一个小技巧
Node.js作为可以在服务器端运行的一门语言,其处理长连接.多请求的优势受到各大编程爱好者的追捧. 但是在开发调试方面却极为不方便,因为每次改动代码后,都需要终止当前进程,重启服务器.supervi ...
- Form 表单相关小技巧
JS ---textarea 高度自适应 var realH = this.scrollHeight + 10+ "px"; $(this).css("height&qu ...
- (网页)JS中的小技巧,但十分的实用!
转自CSDN: 1.document.write(”"); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->(head,body)4. ...
- Vue.js 的一些小技巧
给 props 属性设置多个类型 这个技巧在开发组件的时候用的较多,为了更大的容错性考虑,同时代码也更加人性化: export default { props: { width: { type: [S ...
- sublime相关小技巧
1.快速建立一个新文件:Ctrl+n 2.修改多个相同符号:Ctrl+D 3.建立语言后缀的文件保存,例如我想创建PHP的语言脚本,先按Ctrl+Shift+p,打开Command Palette,输 ...
- js两个小技巧【看到了就记录一下】
1.不声明第三个变量实现交换 ,b=; a=[b,b=a][];//执行完这句代码之后 a的值为2 b的值为1了 2.&&和||的用法 (学会了立马感觉高大尚了吧) ; //传统if语 ...
随机推荐
- RF分层封装
1.如何管理用例? (1).在ride工具中分层管理用例(案例层.元素层.流程层),提高效率 (2).偶尔运行下,保证脚本能正常跑动 2.用例分层操作 案例层:需要加载流程层.txt资源和Seleni ...
- Python之反射机制
什么是反射? 1.有时我们要访问某个变量或是方法时并不知道到底有没有这个变量或方法,所以就要做些判断.判断是否存在字符串对应的变量及方法.2.我们知道访问变量时是不能加引号的,否则会被当成字符串处理. ...
- java命令行导出、导入sql文件
@IocBean public class SqlCommandModel{ //用户名 @Inject("java:$conf.get('jdbc.username')") pr ...
- nginx::环境搭建
ubuntu18.04 环境 1.需要gcc 环境,如果没有gcc环境,则需要安装 apt install gcc .安装pcre依赖库 PCRE(Perl Compatible Regular Ex ...
- 概念理解-IO多路复用
epoll 是 Linux 内核为处理大批量文件描述符而作了改进的 poll,是 Linux 下多路复用 IO接口 select/poll 的增强版本 在 linux 的网络编程中,很长时间都在使用 ...
- ESP8266开发之旅 网络篇⑩ UDP服务
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ggstatsplot绘图|统计+可视化,学术科研神器
本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/zdSit97SOEpbnR18ARzixw 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. ...
- 使用Java8 Stream API对Map按键或值进行排序
一.什么是Java 8 Stream 使用Java 8 Streams,我们可以按键和按值对映射进行排序.下面是它的工作原理: 将Map或List等集合类对象转换为Stream对象 使用Streams ...
- jquery链式原理.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 在ArangoDB中实现connectedcomponents算法
操作环境: tool:ArangoDB 3.3.13 操作系统:Debian 7.2.0-20 概念: Connected Components即连通体算法.用id标注图中每个连通体,将连通体中序号最 ...