• JS、JQ相关小技巧积攒


    JSJQ相关小技巧积攒,以备不时之需。

    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表示缩进几个字符。转义字符: 表示回车。字符串,表示用什么分割

    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。

  • 相关阅读:
    javascript
    自己动手、丰衣足食!<菜单导航栏------不简单>
    补---div渐变色条
    自己动手、丰衣足食!<箭头 → ← → ← ---2>
    自己动手、丰衣足食!<箭头 → ← → ← ---1>
    6.19 抽象类
    6.19 多态
    6.19 提纲
    6.18 继承
    6.18 (继承+(四类访问修饰符+程序集+静态方法))提纲
  • 原文地址:https://www.cnblogs.com/chenboaixuexi/p/11886289.html
Copyright © 2020-2023  润新知