zoukankan      html  css  js  c++  java
  • 框架封装

    如果不使用框架,给页面的标签设置样式
    document.getElementsByTagName("div");或者
    var dvs = document.querySelectorAll("div"),
    for(var i = 0; i < dvs.length; i++) {
    dvs[i].style.border = "1px dotted blue";
    }
    这样写有很多缺点1.一个页面会有很多变量,造成全局变量污染
    2.代码冗余 3.无法复用 4.编码繁琐,容易写错

    所以需要函数来封装,从而优化代码,封装函数的注意点
    1.函数名一般用动词作为开头 2.函数名字要与功能相匹配 3.封装函数要写必要的注释
    在JavaScript中函数是一等公民(有很多特权,以及特殊的使用方式)
    函数能够当作参数来传递,此时把函数称为:回调函数

    封装一个each函数来执行循环的功能
    var each = function(arr, callback) {
    var i, length = arr.length;
    for(i = 0; i < length; i++) {
    // 此处,想让this指向:arr[i] 也就是 数组中的每一个元素
    // if( callback(i, arr[i]) === false) {
    // 第一个arr[i]表示:callback中this的指向
    // 第二个arr[i]表示:表示数组中的当前值
    if( callback.call(arr[i], i, arr[i]) === false) {
    break;
    }
    }
    };
    each(arr, function() { //由于each使用了call方法,所有调用函数的时候回调函数的参数可以视情况不写
    // console.log(this);
    });


    严谨的判断 document.getElementsByClassName兼容性的方法
    // 1 首先,检验对象中是否具有这个方法
    // 2 再检验这个方法的能力是否符合要求

    var support = {};
    support.getElementsByClassName = function() {
    // 用来记录返回值,如果支持就返回true,否则返回false
    var isExist = false;
    // 判断 getElementsByClassName 是否是一个方法
    if(typeof document.getElementsByClassName !== "function") {
    return isExist;
    }

    // 如果是,就执行下面的逻辑
    // 这些逻辑就是用来判断这个方法,是否符合我们的要求
    // 验证:就是看些通过这个方法获取到的结果,是否是我们需要的DOM对象

    // 动态创建一个div元素
    var tempDiv = document.createElement("div");
    // 生成一个随机的类名,并且保证了这个类名不会跟页面中的类名冲突
    // (new Date - 0 )是将日期格式转化为 数值类型
    // 也可以使用 +new Date
    var clsName = "itcast_" + ( new Date - 0 );
    tempDiv.className = clsName;
    // 将创建好的元素放到页面中去
    document.body.appendChild(tempDiv);

    // 判断 通过getElementsByClassName获取到的元素是否跟刚刚创建出来的元素
    // 相同
    // 如果相同,就说明符合要求,
    // 如果不同,就说明不符合要求
    var tempRet = document.getElementsByClassName(clsName);
    if(tempRet) {
    isExist = tempRet[0] === tempDiv;
    }

    // 把这个元素从页面中移除
    document.body.removeChild(tempDiv);

    return isExist;
    }();

    if(support.getElementsByClassName) {
    console.log("存在");
    } else {
    console.log("不存在");
    }

    jquery中用正则表达式判断getElementsByClassName的兼容性
    var support = {};
    support.getElementsByClassName = function() {
    //get方法的内置的方法,在转化为字符串格式的时候,是一个固定的格式!如果是用户声明的这种格式,会造成语法错误! function getElementsByClassName() { [native code] }
    var rnative = /^[^{]+{s*[native w/;
    return rnative.test(document.getElementsByClassName);
    }();

  • 相关阅读:
    2019牛客暑期多校训练营(第六场)
    2019牛客暑期多校训练营(第五场)
    CCPC-Wannafly Summer Camp 2019 全记录
    2018CCPC吉林赛区 | 部分题解 (HDU6555 HDU6556 HDU6559 HDU6561)
    2006-2007 ACM-ICPC | POJ3380 POJ3384 POJ3385 水题题解
    数论专场 Day9 部分题解
    Catenyms (POJ2337) 字典序最小欧拉路
    2019暑训第一场训练赛 |(2016-icpc区域赛)部分题解
    哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)B 小乐乐搭积木 (状态压缩)
    牛客练习赛32B Xor Path (树形dp)
  • 原文地址:https://www.cnblogs.com/sw1990/p/5962364.html
Copyright © 2011-2022 走看看