<!DOCTYPE html> <html> <head> <title>基础核心</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="js/tool.js"></script> <script type="text/javascript" src="js/base.js"></script> <script src="//code.jquery.com/jquery-2.1.4.js"></script> <script type="text/javascript"> /* 一. 代码风格 $(function(){ $('#box').css('color','red'); }); jQuery(function(){ jQuery('#box').css('color','red'); }); alert($ === jQuery); //相等、恒等 $().css('color', 'red'); $(function () { alert($); //jQuery对象的内部 alert($()); //返回的jQuery对象 alert($('#box')); //返回的也是jQuery对象 alert($('#box').css('color', 'red')); //还是返回的jQuery对象 $('#box').css('color', 'red').css('font-size', '200px').css('font-weight', 'bold'); }); 二. 加载模式 我们在之前的代码一直在使用$(function () {});这段代码进行首尾包裹, 那么为什么必须要包裹这段代码呢?原因是我们jQuery库文件是在body元素之前加载的,我们必须等待所 有的DOM元素加载后,延迟支持DOM操作,否则就无法获取到。 在延迟等待加载,JavaScript提供了一个事件为load,方法如下: window.onload = function () {}; //JavaScript等待加载 $(document).ready(function () {}); //jQuery等待加载 load和ready区别 window.onload $(document).ready() 执行时机 必须等待网页全部加载完毕(包括图片等),然后再执行包裹代码 只需要等待网页中的DOM结构加载完毕,就能执行包裹的代码 执行次数 只能执行一次,如果第二次,那么第一次的执行会被覆盖 可以执行多次, 第N次都不会被上一次覆盖 简写方案 无 $(function () { }); window.onload = function () { $('#box').css('color', 'red'); }; window.onload = function () { alert(1); }; window.onload = function () { alert(2); }; $(document).ready(function () { alert(3); }); $(document).ready(function () { alert(4); }); $(function () { alert(1); }); $(function () { alert(2); }); 三.对象互换 $(function () { alert($('#box')); //返回jQuery对象 alert(document.getElementById('box')); //[object HTMLDivElement],原生DOM对象 alert($('#box').get(0)); //[object HTMLDivElement] alert($(document.getElementById('box')).css('color', 'red')); //jQuery对象和DOM对象之间的互换 }); var $$ = jQuery; $(function () { //jQuery库在base库之前引用,那么$所有权就是base库的 alert($('#box').ge(0)); alert($('#box').get(0)); }); */ jQuery.noConflict(); //自行了断,把自己的$所有权剔除 var $$ = jQuery; $(function () { //jQuery库在base库之后引用,那么$所有权就是jQuery库的 alert($('#box').ge(0)); alert($$('#box').get(0)); }); </script> </head> <body> <div id="box">基础核心</div> </body> </html>
//前台调用 var $ = function (args) { return new Base(args); }; //基础库 function Base(args) { //创建一个数组,来保存获取的节点和节点数组 this.elements = []; if (typeof args == 'string') { //css模拟 if (args.indexOf(' ') != -1) { var elements = args.split(' '); //把节点拆开分别保存到数组里 var childElements = []; //存放临时节点对象的数组,解决被覆盖的问题 var node = []; //用来存放父节点用的 for (var i = 0; i < elements.length; i ++) { if (node.length == 0) node.push(document); //如果默认没有父节点,就把document放入 switch (elements[i].charAt(0)) { case '#' : childElements = []; //清理掉临时节点,以便父节点失效,子节点有效 childElements.push(this.getId(elements[i].substring(1))); node = childElements; //保存父节点,因为childElements要清理,所以需要创建node数组 break; case '.' : childElements = []; for (var j = 0; j < node.length; j ++) { var temps = this.getClass(elements[i].substring(1), node[j]); for (var k = 0; k < temps.length; k ++) { childElements.push(temps[k]); } } node = childElements; break; default : childElements = []; for (var j = 0; j < node.length; j ++) { var temps = this.getTagName(elements[i], node[j]); for (var k = 0; k < temps.length; k ++) { childElements.push(temps[k]); } } node = childElements; } } this.elements = childElements; } else { //find模拟 switch (args.charAt(0)) { case '#' : this.elements.push(this.getId(args.substring(1))); break; case '.' : this.elements = this.getClass(args.substring(1)); break; default : this.elements = this.getTagName(args); } } } else if (typeof args == 'object') { if (args != undefined) { //_this是一个对象,undefined也是一个对象,区别与typeof返回的带单引号的'undefined' this.elements[0] = args; } } else if (typeof args == 'function') { this.ready(args); } } //addDomLoaded Base.prototype.ready = function (fn) { addDomLoaded(fn); }; //获取ID节点 Base.prototype.getId = function (id) { return document.getElementById(id) }; //获取元素节点数组 Base.prototype.getTagName = function (tag, parentNode) { var node = null; var temps = []; if (parentNode != undefined) { node = parentNode; } else { node = document; } var tags = node.getElementsByTagName(tag); for (var i = 0; i < tags.length; i ++) { temps.push(tags[i]); } return temps; }; //获取CLASS节点数组 Base.prototype.getClass = function (className, parentNode) { var node = null; var temps = []; if (parentNode != undefined) { node = parentNode; } else { node = document; } var all = node.getElementsByTagName('*'); for (var i = 0; i < all.length; i ++) { if ((new RegExp('(\\s|^)' +className +'(\\s|$)')).test(all[i].className)) { temps.push(all[i]); } } return temps; } //设置CSS选择器子节点 Base.prototype.find = function (str) { var childElements = []; for (var i = 0; i < this.elements.length; i ++) { switch (str.charAt(0)) { case '#' : childElements.push(this.getId(str.substring(1))); break; case '.' : var temps = this.getClass(str.substring(1), this.elements[i]); for (var j = 0; j < temps.length; j ++) { childElements.push(temps[j]); } break; default : var temps = this.getTagName(str, this.elements[i]); for (var j = 0; j < temps.length; j ++) { childElements.push(temps[j]); } } } this.elements = childElements; return this; } //获取某一个节点,并返回这个节点对象 Base.prototype.ge = function (num) { return this.elements[num]; }; //获取首个节点,并返回这个节点对象 Base.prototype.first = function () { return this.elements[0]; }; //获取末个节点,并返回这个节点对象 Base.prototype.last = function () { return this.elements[this.elements.length - 1]; }; //获取某组节点的数量 Base.prototype.length = function () { return this.elements.length; }; //获取某一个节点的属性 Base.prototype.attr = function (attr, value) { for (var i = 0; i < this.elements.length; i ++) { if (arguments.length == 1) { return this.elements[i].getAttribute(attr); } else if (arguments.length == 2) { this.elements[i].setAttribute(attr, value); } } return this; }; //获取某一个节点在整个节点组中是第几个索引 Base.prototype.index = function () { var children = this.elements[0].parentNode.children; for (var i = 0; i < children.length; i ++) { if (this.elements[0] == children[i]) return i; } }; //设置某一个节点的透明度 Base.prototype.opacity = function (num) { for (var i = 0; i < this.elements.length; i ++) { this.elements[i].style.opacity = num / 100; this.elements[i].style.filter = 'alpha(opacity=' + num + ')'; } return this; }; //获取某一个节点,并且Base对象 Base.prototype.eq = function (num) { var element = this.elements[num]; this.elements = []; this.elements[0] = element; return this; }; //获取当前节点的下一个元素节点 Base.prototype.next = function () { for (var i = 0; i < this.elements.length; i ++) { this.elements[i] = this.elements[i].nextSibling; if (this.elements[i] == null) throw new Error('找不到下一个同级元素节点!'); if (this.elements[i].nodeType == 3) this.next(); } return this; }; //获取当前节点的上一个元素节点 Base.prototype.prev = function () { for (var i = 0; i < this.elements.length; i ++) { this.elements[i] = this.elements[i].previousSibling; if (this.elements[i] == null) throw new Error('找不到上一个同级元素节点!'); if (this.elements[i].nodeType == 3) this.prev(); } return this; }; //设置CSS Base.prototype.css = function (attr, value) { for (var i = 0; i < this.elements.length; i ++) { if (arguments.length == 1) { return getStyle(this.elements[i], attr); } this.elements[i].style[attr] = value; } return this; } //添加Class Base.prototype.addClass = function (className) { for (var i = 0; i < this.elements.length; i ++) { if (!hasClass(this.elements[i], className)) { this.elements[i].className += ' ' + className; } } return this; } //移除Class Base.prototype.removeClass = function (className) { for (var i = 0; i < this.elements.length; i ++) { if (hasClass(this.elements[i], className)) { this.elements[i].className = this.elements[i].className.replace(new RegExp('(\\s|^)' +className +'(\\s|$)'), ' '); } } return this; } //添加link或style的CSS规则 Base.prototype.addRule = function (num, selectorText, cssText, position) { var sheet = document.styleSheets[num]; insertRule(sheet, selectorText, cssText, position); return this; } //移除link或style的CSS规则 Base.prototype.removeRule = function (num, index) { var sheet = document.styleSheets[num]; deleteRule(sheet, index); return this; } //设置表单字段元素 Base.prototype.form = function (name) { for (var i = 0; i < this.elements.length; i ++) { this.elements[i] = this.elements[i][name]; } return this; }; //设置表单字段内容获取 Base.prototype.value = function (str) { for (var i = 0; i < this.elements.length; i ++) { if (arguments.length == 0) { return this.elements[i].value; } this.elements[i].value = str; } return this; } //设置innerHTML Base.prototype.html = function (str) { for (var i = 0; i < this.elements.length; i ++) { if (arguments.length == 0) { return this.elements[i].innerHTML; } this.elements[i].innerHTML = str; } return this; } //设置innerText Base.prototype.text = function (str) { for (var i = 0; i < this.elements.length; i ++) { if (arguments.length == 0) { return getInnerText(this.elements[i]); } setInnerText(this.elements[i], text); } return this; } //设置事件发生器 Base.prototype.bind = function (event, fn) { for (var i = 0; i < this.elements.length; i ++) { addEvent(this.elements[i], event, fn); } return this; }; //设置鼠标移入移出方法 Base.prototype.hover = function (over, out) { for (var i = 0; i < this.elements.length; i ++) { addEvent(this.elements[i], 'mouseover', over); addEvent(this.elements[i], 'mouseout', out); } return this; }; //设置点击切换方法 Base.prototype.toggle = function () { for (var i = 0; i < this.elements.length; i ++) { (function (element, args) { var count = 0; addEvent(element, 'click', function () { args[count++ % args.length].call(this); }); })(this.elements[i], arguments); } return this; }; //设置显示 Base.prototype.show = function () { for (var i = 0; i < this.elements.length; i ++) { this.elements[i].style.display = 'block'; } return this; }; //设置隐藏 Base.prototype.hide = function () { for (var i = 0; i < this.elements.length; i ++) { this.elements[i].style.display = 'none'; } return this; }; //设置物体居中 Base.prototype.center = function (width, height) { var top = (getInner().height - height) / 2 + getScroll().top; var left = (getInner().width - width) / 2 + getScroll().left; for (var i = 0; i < this.elements.length; i ++) { this.elements[i].style.top = top + 'px'; this.elements[i].style.left = left + 'px'; } return this; }; //锁屏功能 Base.prototype.lock = function () { for (var i = 0; i < this.elements.length; i ++) { fixedScroll.top = getScroll().top; fixedScroll.left = getScroll().left; this.elements[i].style.width = getInner().width + getScroll().left + 'px'; this.elements[i].style.height = getInner().height + getScroll().top + 'px'; this.elements[i].style.display = 'block'; parseFloat(sys.firefox) < 4 ? document.body.style.overflow = 'hidden' : document.documentElement.style.overflow = 'hidden'; addEvent(this.elements[i], 'mousedown', predef); addEvent(this.elements[i], 'mouseup', predef); addEvent(this.elements[i], 'selectstart', predef); addEvent(window, 'scroll', fixedScroll); } return this; }; Base.prototype.unlock = function () { for (var i = 0; i < this.elements.length; i ++) { this.elements[i].style.display = 'none'; parseFloat(sys.firefox) < 4 ? document.body.style.overflow = 'auto' : document.documentElement.style.overflow = 'auto'; removeEvent(this.elements[i], 'mousedown', predef); removeEvent(this.elements[i], 'mouseup', predef); removeEvent(this.elements[i], 'selectstart', predef); removeEvent(window, 'scroll', fixedScroll); } return this; }; //触发点击事件 Base.prototype.click = function (fn) { for (var i = 0; i < this.elements.length; i ++) { this.elements[i].onclick = fn; } return this; }; //触发浏览器窗口事件 Base.prototype.resize = function (fn) { for (var i = 0; i < this.elements.length; i ++) { var element = this.elements[i]; addEvent(window, 'resize', function () { fn(); if (element.offsetLeft > getInner().width + getScroll().left - element.offsetWidth) { element.style.left = getInner().width + getScroll().left - element.offsetWidth + 'px'; if (element.offsetLeft <= 0 + getScroll().left) { element.style.left = 0 + getScroll().left + 'px'; } } if(element.offsetTop > getInner().height + getScroll().top - element.offsetHeight) { element.style.top = getInner().height + getScroll().top - element.offsetHeight + 'px'; if (element.offsetTop <= 0 + getScroll().top) { element.style.top = 0 + getScroll().top + 'px'; } } }); } return this; }; //设置动画 Base.prototype.animate = function (obj) { for (var i = 0; i < this.elements.length; i ++) { var element = this.elements[i]; var attr = obj['attr'] == 'x' ? 'left' : obj['attr'] == 'y' ? 'top' : obj['attr'] == 'w' ? 'width' : obj['attr'] == 'h' ? 'height' : obj['attr'] == 'o' ? 'opacity' : obj['attr'] != undefined ? obj['attr'] : 'left'; var start = obj['start'] != undefined ? obj['start'] : attr == 'opacity' ? parseFloat(getStyle(element, attr)) * 100 : parseInt(getStyle(element, attr)); var t = obj['t'] != undefined ? obj['t'] : 10; //可选,默认10毫秒执行一次 var step = obj['step'] != undefined ? obj['step'] : 20; //可选,每次运行10像素 var alter = obj['alter']; var target = obj['target']; var mul = obj['mul']; var speed = obj['speed'] != undefined ? obj['speed'] : 6; //可选,默认缓冲速度为6 var type = obj['type'] == 0 ? 'constant' : obj['type'] == 1 ? 'buffer' : 'buffer'; //可选,0表示匀速,1表示缓冲,默认缓冲 if (alter != undefined && target == undefined) { target = alter + start; } else if (alter == undefined && target == undefined && mul == undefined) { throw new Error('alter增量或target目标量必须传一个!'); } if (start > target) step = -step; if (attr == 'opacity') { element.style.opacity = parseInt(start) / 100; element.style.filter = 'alpha(opacity=' + parseInt(start) +')'; } else { //element.style[attr] = start + 'px'; } if (mul == undefined) { mul = {}; mul[attr] = target; } clearInterval(element.timer); element.timer = setInterval(function () { /* 问题1:多个动画执行了多个列队动画,我们要求不管多少个动画只执行一个列队动画 问题2:多个动画数值差别太大,导致动画无法执行到目标值,原因是定时器提前清理掉了 解决1:不管多少个动画,只提供一次列队动画的机会 解决2:多个动画按最后一个分动画执行完毕后再清理即可 */ //创建一个布尔值,这个值可以了解多个动画是否全部执行完毕 var flag = true; //表示都执行完毕了 for (var i in mul) { attr = i == 'x' ? 'left' : i == 'y' ? 'top' : i == 'w' ? 'width' : i == 'h' ? 'height' : i == 'o' ? 'opacity' : i != undefined ? i : 'left'; target = mul[i]; if (type == 'buffer') { step = attr == 'opacity' ? (target - parseFloat(getStyle(element, attr)) * 100) / speed : (target - parseInt(getStyle(element, attr))) / speed; step = step > 0 ? Math.ceil(step) : Math.floor(step); } if (attr == 'opacity') { if (step == 0) { setOpacity(); } else if (step > 0 && Math.abs(parseFloat(getStyle(element, attr)) * 100 - target) <= step) { setOpacity(); } else if (step < 0 && (parseFloat(getStyle(element, attr)) * 100 - target) <= Math.abs(step)) { setOpacity(); } else { var temp = parseFloat(getStyle(element, attr)) * 100; element.style.opacity = parseInt(temp + step) / 100; element.style.filter = 'alpha(opacity=' + parseInt(temp + step) + ')'; } if (parseInt(target) != parseInt(parseFloat(getStyle(element, attr)) * 100)) flag = false; } else { if (step == 0) { setTarget(); } else if (step > 0 && Math.abs(parseInt(getStyle(element, attr)) - target) <= step) { setTarget(); } else if (step < 0 && (parseInt(getStyle(element, attr)) - target) <= Math.abs(step)) { setTarget(); } else { element.style[attr] = parseInt(getStyle(element, attr)) + step + 'px'; } if (parseInt(target) != parseInt(getStyle(element, attr))) flag = false; } //document.getElementById('test').innerHTML += i + '--' + parseInt(target) + '--' + parseInt(getStyle(element, attr)) + '--' + flag + '<br />'; } if (flag) { clearInterval(element.timer); if (obj.fn != undefined) obj.fn(); } }, t); function setTarget() { element.style[attr] = target + 'px'; } function setOpacity() { element.style.opacity = parseInt(target) / 100; element.style.filter = 'alpha(opacity=' + parseInt(target) + ')'; } } return this; }; //插件入口 Base.prototype.extend = function (name, fn) { Base.prototype[name] = fn; };
//浏览器检测 (function() { window.sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/msie ([\d.]+)/)) ? sys.ie = s[1] : (s = ua .match(/firefox\/([\d.]+)/)) ? sys.firefox = s[1] : (s = ua .match(/chrome\/([\d.]+)/)) ? sys.chrome = s[1] : (s = ua .match(/opera\/.*version\/([\d.]+)/)) ? sys.opera = s[1] : (s = ua .match(/version\/([\d.]+).*safari/)) ? sys.safari = s[1] : 0; if (/webkit/.test(ua)) sys.webkit = ua.match(/webkit\/([\d.]+)/)[1]; })(); // DOM加载 function addDomLoaded(fn) { var isReady = false; var timer = null; function doReady() { if (timer) clearInterval(timer); if (isReady) return; isReady = true; fn(); } if ((sys.opera && sys.opera < 9) || (sys.firefox && sys.firefox < 3) || (sys.webkit && sys.webkit < 525)) { // 无论采用哪种,基本上用不着了 /* * timer = setInterval(function () { if * (/loaded|complete/.test(document.readyState)) { * //loaded是部分加载,有可能只是DOM加载完毕,complete是完全加载,类似于onload doReady(); } }, * 1); */ timer = setInterval(function() { if (document && document.getElementById && document.getElementsByTagName && document.body) { doReady(); } }, 1); } else if (document.addEventListener) {// W3C addEvent(document, 'DOMContentLoaded', function() { fn(); removeEvent(document, 'DOMContentLoaded', arguments.callee); }); } else if (sys.ie && sys.ie < 9) { var timer = null; timer = setInterval(function() { try { document.documentElement.doScroll('left'); doReady(); } catch (e) { } ; }, 1); } } // 跨浏览器添加事件绑定 function addEvent(obj, type, fn) { if (typeof obj.addEventListener != 'undefined') { obj.addEventListener(type, fn, false); } else { // 创建一个存放事件的哈希表(散列表) if (!obj.events) obj.events = {}; // 第一次执行时执行 if (!obj.events[type]) { // 创建一个存放事件处理函数的数组 obj.events[type] = []; // 把第一次的事件处理函数先储存到第一个位置上 if (obj['on' + type]) obj.events[type][0] = fn; } else { // 同一个注册函数进行屏蔽,不添加到计数器中 if (addEvent.equal(obj.events[type], fn)) return false; } // 从第二次开始我们用事件计数器来存储 obj.events[type][addEvent.ID++] = fn; // 执行事件处理函数 obj['on' + type] = addEvent.exec; } } // 为每个事件分配一个计数器 addEvent.ID = 1; // 执行事件处理函数 addEvent.exec = function(event) { var e = event || addEvent.fixEvent(window.event); var es = this.events[e.type]; for ( var i in es) { es[i].call(this, e); } }; // 同一个注册函数进行屏蔽 addEvent.equal = function(es, fn) { for ( var i in es) { if (es[i] == fn) return true; } return false; }; // 把IE常用的Event对象配对到W3C中去 addEvent.fixEvent = function(event) { event.preventDefault = addEvent.fixEvent.preventDefault; event.stopPropagation = addEvent.fixEvent.stopPropagation; event.target = event.srcElement; return event; }; // IE阻止默认行为 addEvent.fixEvent.preventDefault = function() { this.returnValue = false; }; // IE取消冒泡 addEvent.fixEvent.stopPropagation = function() { this.cancelBubble = true; }; // 跨浏览器删除事件 function removeEvent(obj, type, fn) { if (typeof obj.removeEventListener != 'undefined') { obj.removeEventListener(type, fn, false); } else { if (obj.events) { for ( var i in obj.events[type]) { if (obj.events[type][i] == fn) { delete obj.events[type][i]; } } } } } // 跨浏览器获取视口大小 function getInner() { if (typeof window.innerWidth != 'undefined') { return { width : window.innerWidth, height : window.innerHeight }; } else { return { width : document.documentElement.clientWidth, height : document.documentElement.clientHeight }; } } // 跨浏览器获取滚动条位置 function getScroll() { return { top : document.documentElement.scrollTop || document.body.scrollTop, left : document.documentElement.scrollLeft || document.body.scrollLeft }; } // 跨浏览器获取Style function getStyle(element, attr) { var value = ""; if (typeof window.getComputedStyle != 'undefined') {// W3C value = window.getComputedStyle(element, null)[attr]; } else if (typeof element.currentStyle != 'undeinfed') {// IE value = element.currentStyle[attr]; } return value; } // 判断class是否存在 function hasClass(element, className) { return element.className .match(new RegExp('(\\s|^)' + className + '(\\s|$)')); } // 跨浏览器添加link规则 function insertRule(sheet, selectorText, cssText, position) { if (typeof sheet.insertRule != 'undefined') {// W3C sheet.insertRule(selectorText + '{' + cssText + '}', position); } else if (typeof sheet.addRule != 'undefined') {// IE sheet.addRule(selectorText, cssText, position); } } // 跨浏览器移出link规则 function deleteRule(sheet, index) { if (typeof sheet.deleteRule != 'undefined') {// W3C sheet.deleteRule(index); } else if (typeof sheet.removeRule != 'undefined') {// IE sheet.removeRule(index); } } // 跨浏览器获取innerText function getInnerText(element) { return (typeof element.textContent == 'string') ? element.textContent : element.innerText; } // 跨浏览器设置innerText function setInnerText(elememt, text) { if (typeof element.textContent == 'string') { element.textContent = text; } else { element.innerText = text; } } // 获取某一个元素到最外层顶点的位置 function offsetTop(element) { var top = element.offsetTop; var parent = element.offsetParent; while (parent != null) { top += parent.offsetTop; parent = parent.offsetParent; } return top; } // 删除左后空格 function trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ''); } // 某一个值是否存在某一个数组中 function inArray(array, value) { for ( var i in array) { if (array[i] === value) return true; } return false; } // 获取某一个节点的上一个节点的索引 function prevIndex(current, parent) { var length = parent.children.length; if (current == 0) return length - 1; return parseInt(current) - 1; } // 获取某一个节点的下一个节点的索引 function nextIndex(current, parent) { var length = parent.children.length; if (current == length - 1) return 0; return parseInt(current) + 1; } // 滚动条固定 function fixedScroll() { window.scrollTo(fixedScroll.left, fixedScroll.top); } // 阻止默认行为 function predef(e) { e.preventDefault(); } // 创建cookie function setCookie(name, value, expires, path, domain, secure) { var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value); if (expires instanceof Date) { cookieText += '; expires=' + expires; } if (path) { cookieText += '; expires=' + expires; } if (domain) { cookieText += '; domain=' + domain; } if (secure) { cookieText += '; secure'; } document.cookie = cookieText; } // 获取cookie function getCookie(name) { var cookieName = encodeURIComponent(name) + '='; var cookieStart = document.cookie.indexOf(cookieName); var cookieValue = null; if (cookieStart > -1) { var cookieEnd = document.cookie.indexOf(';', cookieStart); if (cookieEnd == -1) { cookieEnd = document.cookie.length; } cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd)); } return cookieValue; } // 删除cookie function unsetCookie(name) { document.cookie = name + "= ; expires=" + new Date(0); }