• 日常整理


    1: 图片加链接后有的浏览器默认蓝色边框, 消除方法

        img{border:0;}或者 img{border:none;}
       img虽然没有border,但是这种情况可以解决遇到a标签包裹的时候出现的问题。


    2 3条以上 ie 和 ff 的脚本兼容问题

    一、脚本差异:

    1、事件绑定:addEventListener 与 attachEvent  事件处理函数中this指向不同, IE中指向window
    2、获取事件对象 :事件处理函数     window.event 
    3、获取触发事件的DOM元素: target  srcElement
    4、阻止默认行为: e.preventDefault()   e.returnValue= false
    5、阻止冒泡:e.stopPropagation()  e.cancelBubble = true;
    6、获取样式信息:getComputedStyle(obj,null).width  currentStyle.width
    7、实例化XHR对象  new XMLHttpRequest()  newActiveXObject()
    8、获取dom元素: parentNode parentElement  
     
     
    二、css差异
     
    1、!important  优先级最高,在IE6以下异常。
     
     


    3 XHTML与HTML区别是什么?

    html:超文本标记语言 (Hyper Text Markup Language)

    xhtml:可扩展超文本标记语言,是一种置标语言,表现方式与超文本标记语言(HTML)类似,不过语法上更加严格。XHTML 元素必须被正确地嵌套

         XHTML 元素必须被关闭,空标签也必须被关闭,如 <br> 必须写成 <br />
         XHTML 标签名必须用小写字母
         XHTML 文档必须拥有根元素
         XHTML 文档要求给所有属性赋一个值
         XHTML 要求所有的属性必须用引号""括起来
         XHTML 文档需要把所有 < 、>、& 等特殊符号用编码表示
         XHTML 文档不要在注释内容中使“--”
         XHTML 图片必须有说明文字
         XHTML 文档中用id属性代替name属性


    4 构建一个自定义版本的foeach函数


    5 slice方法返回字符串的片段。 
    strObj.slice(start[,end]) 
    说明: 
    start下标从0开始的strObj指定部分其实索引。如果start为负,将它作为length+start处理,此处length为字符串的长度。 
    end小标从0开始的strObj指定部分结束索引。如果end为负,将它作为length+end处理,此处length为字符串的长度。 
    例如: 
    012345 
    var str = "ABCDEF"; 
    str.slice(2,4); 
    结果:CD 
    slice(start,end) 从某个已有的数组返回选定的元素
    请注意,该方法并不会修改数组,而是返回一个子数组

    substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。  一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定 length,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。

    6 jQuery事件绑定on()、bind()与delegate() 方法详解

    bind   

    给匹配到的元素直接绑定事件(不推荐,1.7以后的jQuery版本被on取代)

    第一个参数:事件类型

    第二个参数:事件处理程序

    $("p").bind("click mouseenter", function(e){

        //事件响应方法

    });

    优点:可以同时绑定多个事件,比如:bind(“mouseenter  mouseleave”, function(){})

    缺点:仍然无法给动态创建的元素绑定事件

    delegate方式

    作用:给匹配到的元素绑定事件,对支持动态创建的元素有效(特点:性能高,支持动态创建的元素)

    // 第一个参数:selector,要绑定事件的元素

    // 第二个参数:事件类型

    // 第三个参数:事件处理函数

    $(".parentBox").delegate("p", "click", function(){

        //为 .parentBox下面的所有的p标签绑定事件

    });

    与前两种方式最大的优势:减少事件绑定次数提高效率,支持动态创建出来的元素绑定事件

    on

    我们现在用on的方式来绑定事件(最现代的方式,强烈建议使用的方式)

    jQuery1.7版本后,jQuery用on统一了所有的事件处理的方法

    作用:给匹配的元素绑定事件,包括了上面所有绑定事件方式的优点

      事件解绑

    unbind() 方式

    作用:解绑 bind方式绑定的事件

    $(selector).unbind(); //解绑所有的事件

    $(selector).unbind(“click”); //解绑指定的事件

    undelegate() 方式

    作用:解绑delegate方式绑定的事件

    $( selector ).undelegate(); //解绑所有的delegate事件

    $( selector).undelegate( “click” ); //解绑所有的click事件

    off解绑on方式绑定的事件(重点)

    // 解绑匹配元素的所有事件

    $(selector).off();

    // 解绑匹配元素的所有click事件

    $(selector).off(“click”);

    // 解绑所有代理的click事件,元素本身的事件不会被解绑

    $(selector).off( “click”, “**” );

    1.选择器匹配到的元素比较多时,不要用bind()迭代绑定

    2.用id选择器时,可以用bind()

    3.需要给动态添加的元素绑定时,用delegate()或者on()

    4.用delegate()和on()方法,dom树不要太深

    5.尽量使用on()

      事件触发(重点)

    简单事件触发

    $(selector).click(); //触发 click事件

    trigger方法触发事件

    $(selector).trigger(“click”);

    triggerHandler触发 事件响应方法,不触发浏览器行为

    比如:文本框获得焦点的默认行为

    $(selector).triggerHandler(“focus”);

     

     

    forEach

        语法: 数组.forEach( callback )

        执行: 遍历数组中的每一个元素, 并且将每一个元素的处理过程交给回调函数

        回调函数中会传入两个参数, 一个是遍历的数组元素, 一个是当前的索引.

     

    // 首先如果不提供参数, 那么 this 是 window

            // 如果提供一个对象 那么 这个对象就是 回调函数中的 this

            // 但是 forEach 这个方法执行一次, 也就是说这个对象是固定不变的

            // 也就表明回调函数中的 this 不会随着遍历元素的改变而改变, 它是固定的

     

        例如: 遍历打印数组中的每一个元素与索引号

        传统:

            for ( var i = 0; i < arr.length; i++ ) {

                console.log( i + ', ' + arr[ i ] );  // 打印, 索引号 与 当前元素

            }

        forEach:

            arr.forEach( function ( value, index ) { 

                console.log( index + ', ' + value );

            } );

        比较一下 jq 中的 each 方法

            $.each( arr, function ( i, v ) { ... } )

        为什么要这样抽象???

            由于大多数循环数组都是将数组全部遍历, 因此 forEach 默认就是将数组遍历出来

            我们遍历数组的重点是在操作数组中的 当前元素与当前索引. 因此我们将其抽象出来

            单独放到回调函数中处理. 那么我们的业务逻辑更加集中.

     

        思考: 为什么 jq 的 each 方法中回调函数的 参数是 i, v; 而数组中的参数是 v, i 呢?

            从实际开发中考虑, 统计上来说遍历数组的时候使用 i 多还是 v 多?

            js 中很多特征是动态的, 因此将回调函数写成 v, i 的形式, 如果不需要使用索引, 直接不提供 i 这个参数

     

            arr.forEach( function ( v, i ) { 

                // 在函数中只会用到 v 而不会用到 i

            } );

     

            // 如果在设计这个 api 的时候是将 i 放在前面, 那么使用的时候即使不使用 i 也得写

            arr.forEach( function ( i, v ) { 

                // 在函数中只会用到 v 而不会用到 i

            } );

     

            在 jq 中遍历 each 方法有两个, 一个是静态的, 一个是实例.

            $.each( arr, callback );

            $( 'div' ).each( callback );

            在 jq 中遍历每一个 dom 对象的时候 一般不是使用 参数 v 而是使用 this

     

            $( 'div' ).each( function ( i ) {

                this 直接就是 DOM 元素, 如果要使用 索引, 在参数中提供 i 即可

            });

     

     

     

     

    map 函数

        语法:

            数组.map( 回调函数 )

        简单的来理解, map 也是在遍历数组. 这种理解不准确.

     

        map 原意 映射, 通俗的理解就是将一个集合按照特定的规律变成另一个集合.

        例如: 有数字构成的集合, 将其中 的数字扩大一倍.

     

        map 的实现逻辑

        1> map 函数要返回一个数组

        2> map 返回的这个数组的元素由 回调函数的返回值决定

     

        类比: 

            [ 1, 2, 3 ], []

            [ 1, 2, 3 ], [ 2 ]

            [ 1, 2, 3 ], [ 2, 4 ]

            [ 1, 2, 3 ], [ 2, 4, 6]

        map 函数也是如此, map 函数中的回调函数来实现我们的规则

            var newArr = arr.map( function ( v, i ) {

                return v * 2;

            });

        如果回调函数没有返回值, 注意默认返回了 undefined

     

        我们的要求是将数组中的元素转换成另一个东西, 那么这个转换的过程由回调函数来实现

     

        典型的案例:

            'a,b,c'.split( ',' ).map(function ( v ) {

                return '<td>' + v + '</td>';

            });

            // [ 'a', 'b', 'c' ] => [ '<td>a</td>', '<td>b</td>', '<td>c</td>' ]

     

        将箭头函数引入 map. 上面的案例就可以改良成

            'a,b,c'.split( ',' ).map( v => '<td>' + v + '</td>' );

     

    7. jq 中 map 方法与数组 中提供的 map 的异同( 讨论 )

     

    8. every 和 some

        some 方法, 表示判断数组中的元素只要含有某一个条件即可

        every 方法, 表示判断数组中的每一个元素必须含有某个条件

     

        语法: 

            数组.方法名( 回调函数 ) -> boolean

        说明:

        1> 回调函数依旧是遍历数组的每一个元素

        2> 回调函数的参数依旧是 v, i

        3> 回调函数的作用是用来判断数组中的元素, 所以回调函数有返回值, 返回一个 boolean

        4> some 方法凡是发现满足了条件的元素就会停止遍历, 并返回 true, 否则返回 false.

        5> every 方法凡是发现了一个元素不满足条件就会停止遍历, 并返回 false, 否则返回 true.

     

        该方法与逻辑中断类似 是逻辑中断的升级版.

     

        ||  表达式1 || 表达式2

            如果表达式1为假, 才会判断表达式2, 如果表达式1已经真 那么不执行表达式2, 就得到结果

        &&  表达式1 && 表达式2

            如果表达式1为假, 那么不在判断表达式2, 直接得到结果为假, 如果表达式1为真, 再判断表达式2

     

        

        练习: 有一个数组, 判断该数组中是否含有数字.

            var arr = [ 'a', 'b', '12', 123 , 'd' ];

            arr.some( function ( v ) {

                return typeof v == 'number';

            });

        如果说练习是 判断数组中是否都为 DOM 元素( 潜规则, 判断元素是否含有属性 nodeType )

            arr.every( function ( v ) {

                // 如果是dom 元素应该返回 true

                // 如果不是 dom 元素 返回 false

                return v.nodeType;

            });

     

     

        ( 扩展 ) 有些项目中需要判断两个表达式, 但是还是要实现逻辑运算

     

        if ( ( v1 = xxxxxx ) || ( v2 = xxxxxxxxxx ) ) {

        }

     

        可以使用 按位或( | ) 与 按位与( & )

     

        注意在逻辑真假中 按位与 和 逻辑与, 以及 按位或与逻辑或 真值等价.

     

        按位与, 就是比较二进制数据中每一个二进制位 并且求 与

     

            0011 & 1100 = 0000 => 3 & 12 == 0

     

            0111 & 0100 = 0100 => 7 & 4 == 4

        

        位运算在前端领域一般在权限限制 状态操作等方面使用. 但是不是绝对的.

     

        算法: 在 a, b, c, d, e, f, g 这几个字符中, 随机的取出 3 个字符串来, 不允许重复 将所有的取法求出来.

     

     

     

    9. 问题

        数组中遍历方法能不能使用 this.

        在 js 中这个 this 在函数中被称为上下文( 环境 ).

     

     

    10. filter 函数

        功能: 将一个数组中符合某要求的所有元素筛选出来, 组成一个新的数组返回.

        语法: 数组.filter( 回调函数 ) -> 新数组

        回调函数的参数依旧是 v, i

        回调函数判断的时候, 判断元素 v 是否符合要求, 如果符合返回 true, 否则返回 false

        filter 就会将所有的符合元素组成新的数组

     

        案例: 将所有的数字中奇数取出来.

            var arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ];

            arr.filter( v => v % 2 == 1 );

     

            等价于

            arr.filter( function ( v ) {

                return v % 2 == 1;

            } );



    forEach    语法: 数组.forEach( callback )    执行: 遍历数组中的每一个元素, 并且将每一个元素的处理过程交给回调函数    回调函数中会传入两个参数, 一个是遍历的数组元素, 一个是当前的索引.
    // 首先如果不提供参数, 那么 this 是 window        // 如果提供一个对象 那么 这个对象就是 回调函数中的 this        // 但是 forEach 这个方法执行一次, 也就是说这个对象是固定不变的        // 也就表明回调函数中的 this 不会随着遍历元素的改变而改变, 它是固定的
        例如: 遍历打印数组中的每一个元素与索引号    传统:        for ( var i = 0; i < arr.length; i++ ) {            console.log( i + ', ' + arr[ i ] );  // 打印, 索引号 与 当前元素        }    forEach:        arr.forEach( function ( value, index ) {             console.log( index + ', ' + value );        } );    比较一下 jq 中的 each 方法        $.each( arr, function ( i, v ) { ... } )    为什么要这样抽象???        由于大多数循环数组都是将数组全部遍历, 因此 forEach 默认就是将数组遍历出来        我们遍历数组的重点是在操作数组中的 当前元素与当前索引. 因此我们将其抽象出来        单独放到回调函数中处理. 那么我们的业务逻辑更加集中.
        思考: 为什么 jq 的 each 方法中回调函数的 参数是 i, v; 而数组中的参数是 v, i 呢?        从实际开发中考虑, 统计上来说遍历数组的时候使用 i 多还是 v 多?        js 中很多特征是动态的, 因此将回调函数写成 v, i 的形式, 如果不需要使用索引, 直接不提供 i 这个参数
            arr.forEach( function ( v, i ) {             // 在函数中只会用到 v 而不会用到 i        } );
            // 如果在设计这个 api 的时候是将 i 放在前面, 那么使用的时候即使不使用 i 也得写        arr.forEach( function ( i, v ) {             // 在函数中只会用到 v 而不会用到 i        } );
            在 jq 中遍历 each 方法有两个, 一个是静态的, 一个是实例.        $.each( arr, callback );        $( 'div' ).each( callback );        在 jq 中遍历每一个 dom 对象的时候 一般不是使用 参数 v 而是使用 this
            $( 'div' ).each( function ( i ) {            this 直接就是 DOM 元素, 如果要使用 索引, 在参数中提供 i 即可        });

    10 :    switch底层是===判断:如果数值相等数据类型不同,那么也不算。

  • 相关阅读:
    cp备份操作时如何忽略指定的目录
    Wordpress“固定链接”页面出现404原因及解决方法
    CentOS7上搭建WEB服务器
    坑爹的云服务安全组
    java spring hibernate
    电脑性能
    android subclipse subversive
    android 开发 程序中下载安装APK文件 问题汇总 解析程序包时出现问题
    android sqlite datetime demo
    android SurfaceView中播放视频 按视频的原始比例播放
  • 原文地址:https://www.cnblogs.com/fly-xfa/p/7253350.html
Copyright © 2020-2023  润新知