部分原生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);
                    }
                }
            };
        }
    };
原文地址:https://www.cnblogs.com/chuyu/p/3454160.html