• 部分原生js的兼容实现


    一:获取当前元素的所有class:

    div:  <li class="J_list     now">

    1: var classes = $0.className.split(" "); //  ["J_list", "", "", "", "", "now"];

    2: var classed = $0.className.split(/s+/); // ["J_list", "now"]

    这两的区别(多个空格)。

    二:阻止继续查找 资源浪费
    var arr = [1,2,3,4,5,6,7];

    for(var i = 0, _len = arr.length; i < _len; i++){
      console.log(i);
      if(arr[i] == 4){
        console.log("xxxx");
        break;
      }
    }--A

    for(var i = 0, _len = arr.length; i < _len; i++){
      console.log(i);
      if(arr[i] == 4){
        console.log("aaaax");
        i = _len;
      }
    }---B

    (A跟B效果一样)。

    三:splice()

    1: 两个参数,splice(a, b)---a: 要删除的第一项的位置;b: 要删除的项数

    2: 多个参数   A:splice(2, 0, "red", "green"); 第二个参数是0的时候表示插入。

           B:splice(2, 1, "red", "green"); 第二个参数不是0的时候表示替换。

    四: hasClass()

    <div id="hasclass" class="xian1">
      我想测试
    </div>

    var classTest = document.getElementById("hasclass");
    console.log(!!classTest.className.match("\s*" + "xian" + "\s*"));// true 这种检测是不准确的
    
    
    function hasClass(name,obj){
      var classes = obj.className.split(/s+/);
      for(var i = 0, _len = classes.length; i < _len; i++){
        if(classes[i] == name){
          return true;
        }
      }
      return false;
    }
    console.log(hasClass("xian", classTest));// false  正确!

    五:trim()

    trim = function(text) {
            return text == null ? "" : text.replace(/(^s*)|(s*$)/g, "");
        };

    六: parseJSON()

    parseJSON = function(data) {
            if (!data || typeof data !== "string") {
                return null;
            }
            data = X.trim(data);
            if(win.JSON && win.JSON.parse) {
                return win.JSON.parse(data);
            }
            return (new Function("return " + data))();
        };

    七: ajax({})

    ajax = function(opts) {
            var dataType = opts.dataType;
            var data = opts.data;
            var url = opts.url;
            var sucFn = opts.sucFn;
            if(dataType === 'jsonp') {
                var script = doc.createElement('script');
                var head = doc.getElementsByTagName('head')[0];
                script.type = 'text/javascript';
                var fnName = 'jsonp_' + Math.floor(Math.random()*10E10) + '_' + new Date().getTime();
                win[fnName] = function(data) {
                    sucFn(data);
                    head.removeChild(script);
                };
                head.appendChild(script);
                url = url + '?jsoncallback=' + fnName + '&' + data + '&' + 'r=' + new Date().getTime();
                script.src = url;
            } else {
                var req = null;
                if (win.XMLHttpRequest) {
                    req = new XMLHttpRequest();
                } else {
                    req = new ActiveXObject("Microsoft.XMLHTTP");
                }
                var type = opts.type;
                url = opts.url + (type === 'GET' ? '?'+ data : '');
                req.open(type, url, true);
                if(type === 'POST') {
                    req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                }
                req.send(data);
                req.onreadystatechange = function() {
                    if (req.readyState === 4) {
                        if (req.status === 200) {
                            sucFn(dataType === 'json' ? X.parseJSON(req.responseText) : req.responseText);
                        } else {
                            opts.failFn && opts.failFn(req.status);
                        }
                    }
                };
            }
        };
  • 相关阅读:
    windows2019开发windows服务
    vue开发笔记
    kafka管理界面 kafka eagle
    WPF 无边框窗体改变大小和移动
    3种方法改变Linux的默认shell
    Linux,原来cd命令这样玩
    Linux中cp命令的使用方法
    Linux 中ls命令的使用
    如何查看Linux的内存使用率
    Linux中如何重命名文件
  • 原文地址:https://www.cnblogs.com/chuyu/p/3454160.html
Copyright © 2020-2023  润新知