zoukankan      html  css  js  c++  java
  • 浏览器兼容性小整理和一些js小问题(后面会继续更新)

    最近在啃jQuery的源码,估计会啃到很多浏览器兼容性的问题,所以整理一下

    1,IE下的内存泄露.

    在IE中不在DOM树中的独立节点有javascript变量引用它的时候不会被回收。

    解决:手动将该js变量置为null

    2,IE<9,Nodelist无法调用slice和push

    解决:手动模拟

    3,IE,直接使用elem.attrName的形式获得属性值会自动串改DOM元素的某些属性,比如a的href

    解决:使用elem.getAttribute(attrName)或elem.getAttributeNode(attrName).value
    4,IE<9,使用getAttribute获取input元素的value时返回null

    解决:通过elem.defaultValue来获取

    5,IE<9,不能直接使用getAttribute('className')来获取class

    解决:使用getAttribute('class')

    6,Opera < 10,当一个元素有多个class的时候,用getElementsByClassName来获取第二个类会出错。
    解决:不要使用这个API

    7,黑莓4.6的浏览器会返回那些不在DOM树中的节点。
    解决:用elem.parentNode来判断是否在DOM树中

    8,IE8中的QSA无法使用[selected]之类的属性选择符,无法使用:checked之类的伪元素,对name的大小写不敏感

    9,contains不应该包含自身

    10,检测字符串可以转换为数字,使用这个方法obj - parseFloat( obj ) >= 0

    11,delete DOM元素上的自定义属性时,IE<9会报错,具体规则如下

    var div = document.createElement( "div" );
    try {
        //IE7无论div是否有test都会抛出异常。
        //IE8在没test的情况下会抛出异常,有test的情况下不会。
        //IE9都不会。
        delete div.test;
        } catch( e ) {
        alert(1);
    }
    

    所以这里要做判断,IE下使用removeAttribute来删除

    12,JSON.stringify的tips

    //var see = {name:'see',id:{toJSON:function () {}}};JSON.stringify(see)
    //var see = {my:function () {}};JSON.stringify(see);
    //JSON.stringify(window);

    //stringify是无法转换带函数、带循环引用的对象的

    13,IE6-7用InnerHTML生成table会自动插入tbody

    14,IE678不能直接用InnerHTML生成link元素

    15,checkbox进行append后,它的checked状态不会保留。IE67

    16,radio在进行append后,它的checked状态如果出现在name属性之前则不会保留。webkit(实测只有safari会出现这样的状况)

    17,IE下textarea的defaultValue不一定被正确地克隆

    18,Webkit下fragment元素里的input元素的checked状态不会被正确克隆

    19,有的事件没有target,比如load ,IE67

    20,event.target不能为TEXT_NODE,chrome23+,safari老版本

    21,老版本的FF不会触发非左键click的冒泡

    22,IE678在detach事件时,还需要手动将onEventType如onclick置为null

  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/suprise/p/3628057.html
Copyright © 2011-2022 走看看