javascript十个最常用的自定义函数,浏览器内八个标签页之间的通讯之storage

By admin in 4858美高梅 on 2019年4月2日

在一个标签页里面使用 localStorage.setItem(key,value)添加(修改、删除)内容; 
在另一个标签页里面监听 storage 事件。 
即可得到 localstorge 存储的值,达成分歧标签页之间的通讯(差别标签页,但能够为同一页面)。

方法一、setAttribute
var obj = document.getElementById(“obj”);
obj.setAttribute(“onclick”, “javascript:alert(‘测试’);”);
而是IE不帮忙用 setAttribute
设置有些质量,蕴涵对象属性、集合属性、事件性质,也正是说用 setAttribute
设置 style、onclick、onmouseover 那个属性在 IE 中是低效的。

(10)addEvent
网上最流行的本子是ScottAndrew的,听他们说javascript界曾进行一场竞技(此事件大家得以在Pro Javascript
Techniques第90页看到)或浏览PPK的网站,征求添加事件与移除事件的函数,他正是其获奖者。上边便是她的完毕:

(10)addEvent
网上最盛行的版本是斯科特Andrew的,据他们说javascript界曾举办一场交锋(此事件我们得以在Pro Javascript
Techniques第⑩0页看到)或浏览PPK的网址,征求添加事件与移除事件的函数,他正是其获奖者。上边就是她的贯彻:

 <style>
    #data, #fromEvent {
      width: 400px;
      height: 100px;
      border: 1px solid #666;
      margin: 50px auto 20px;
      padding: 10px;
    }
  </style>

  <div id="data" contenteditable="true"></div>
  <div id="fromEvent"></div>
  <button id="save">storage</button>

方法二、用 attachEvent 和 addEventListener
IE 支持 attachEvent,object.attachEvent(event,function),例如:

复制代码 代码如下:

复制代码 代码如下:

 

复制代码 代码如下:

function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);//DOM2.0
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent(‘on’ + evType, fn);//IE5+
return r;
}
else {
elm[‘on’ + evType] = fn;//DOM 0
}
}

function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);//DOM2.0
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent(‘on’ + evType, fn);//IE5+
return r;
}
else {
elm[‘on’ + evType] = fn;//DOM 0
}
}

 

obj.attachEvent(“onclick”, Foo);
function Foo()
{
alert(“测试”);
}

下面是Dean Edwards 的版本

下面是Dean Edwards 的版本

var addEvent = (function() {

要么写成 obj.attach伊夫nt(“onclick”, function(){alert(“测试”);});
别的浏览器支持add伊芙ntListener,element.add伊芙ntListener(type,listener,useCapture,

复制代码 代码如下:

复制代码 代码如下:

  if (document.addEventListener) {

复制代码 代码如下:

// addEvent/removeEvent written by Dean Edwards, 2005
// with input from Tino Zijdel
//
function addEvent(element, type, handler) {
//为每3个事件处理函数分派三个唯一的ID
if (!handler.$$guid) handler.$$guid = addEvent.guid++;
javascript十个最常用的自定义函数,浏览器内八个标签页之间的通讯之storage。//为因素的事件类型创造叁个哈希表
if (!element.events) element.events = {};
//为每二个”成分/事件”对创制三个事件处理程序的哈希表
var handlers = element.events[type];
if (!handlers) {
handlers = element.events[type] = {};
//存款和储蓄存在的事件处理函数(如若有)
if (element[“on” + type]) {
handlers[0] = element[“on” + type];
}
}
//将事件处理函数存入哈希表
handlers[handler.$$guid] = handler;
//指派三个大局的事件处理函数来做有所的干活
element[“on” + type] = handleEvent;
};
//用来成立唯壹的ID的计数器
addEvent.guid = 1;
function removeEvent(element, type, handler) {
//从哈希表中除去事件处理函数
if (element.events && element.events[type]) {
delete element.events[type][handler.$$guid];
}
};
function handleEvent(event) {
var returnValue = true;
//抓获事件指标(IE使用全局事件目的)
event = event || fixEvent(window.event);
//取得事件处理函数的哈希表的引用
var handlers = this.events[event.type];
//执行每二个处理函数
for (var i in handlers) {
this.$$handleEvent = handlers[i];
if (this.$$handleEvent(event) === false) {
returnValue = false;
}
}
return returnValue;
};
//为IE的轩然大波目的添加一些“缺点和失误的”函数
function fixEvent(event) {
//添加行业内部的W3C方法
event.preventDefault = fixEvent.preventDefault;
event.stopPropagation = fixEvent.stopPropagation;
return event;
};
fixEvent.preventDefault = function() {
this.returnValue = false;
};
fixEvent.stopPropagation = function() {
this.cancelBubble = true;
};

// addEvent/removeEvent written by Dean Edwards, 2005
// with input from Tino Zijdel
//
function addEvent(element, type, handler) {
//为每贰个事件处理函数分派贰个唯1的ID
if (!handler.$$guid) handler.$$guid = addEvent.guid++;
//为因素的事件类型创设3个哈希表
if (!element.events) element.events = {};
//为每3个”成分/事件”对创设贰个事件处理程序的哈希表
var handlers = element.events[type];
if (!handlers) {
handlers = element.events[type] = {};
//存款和储蓄存在的事件处理函数(如若有)
if (element[“on” + type]) {
handlers[0] = element[“on” + type];
}
}
//将事件处理函数存入哈希表
handlers[handler.$$guid] = handler;
//指派二个大局的事件处理函数来做有所的干活
element[“on” + type] = handleEvent;
};
//用来创建唯一的ID的计数器
addEvent.guid = 1;
function removeEvent(element, type, handler) {
//从哈希表中删除事件处理函数
if (element.events && element.events[type]) {
delete element.events[type][handler.$$guid];
}
};
function handleEvent(event) {
var returnValue = true;
//抓获事件目的(IE使用全局事件目的)
event = event || fixEvent(window.event);
//取得事件处理函数的哈希表的引用
var handlers = this.events[event.type];
//执行每二个处理函数
for (var i in handlers) {
this.$$handleEvent = handlers[i];
if (this.$$handleEvent(event) === false) {
returnValue = false;
}
}
return returnValue;
};
//为IE的事件指标添加一些“缺点和失误的”函数
function fixEvent(event) {
//添加正规的W3C方法
event.preventDefault = fixEvent.preventDefault;
event.stopPropagation = fixEvent.stopPropagation;
return event;
};
fixEvent.preventDefault = function() {
this.returnValue = false;
};
fixEvent.stopPropagation = function() {
this.cancelBubble = true;
};

    return function(el, type, fn) {

obj.addEventListener(“click”, Foo, false);
function Foo()
{
alert(“测试”);
}

成效一点都非常大胆,消除IE的this指向难题,event总是作为第二个参数字传送入,跨浏览器就更不在话下。
另,小编还珍藏了1个HTML伍工作组的本子:

功效相当勇敢,化解IE的this指向难题,event总是作为第一个参数字传送入,跨浏览器就更不在话下。
另,笔者还收藏了三个HTML5工作组的本子:

      if (el.length) {

同样也可写在一起obj.add伊夫ntListener(“click”,
function(){alert(“测试”);}, false);
注意 attach伊芙nt 的轩然大波带 on,如 onclick,而 add伊夫ntListener 不带
on,如 click。

复制代码 代码如下:

复制代码 代码如下:

        for (var i = 0; i < el.length; i++) {

复制代码 代码如下:

var addEvent=(function(){
if(document.addEventListener){
return function(el,type,fn){
if(el.length){
for(var i=0;i<el.length;i++){
addEvent(el[i],type,fn);
}
}else{
el.addEventListener(type,fn,false);
}
};
}else{
return function(el,type,fn){
if(el.length){
for(var i=0;i<el.length;i++){
addEvent(el[i],type,fn);
}
}else{
el.attachEvent(‘on’+type,function(){
return fn.call(el,window.event);
});
}
};
}
})();

var addEvent=(function(){
if(document.addEventListener){
return function(el,type,fn){
if(el.length){
for(var i=0;i<el.length;i++){
addEvent(el[i],type,fn);
}
}else{
el.addEventListener(type,fn,false);
}
};
}else{
return function(el,type,fn){
if(el.length){
for(var i=0;i<el.length;i++){
addEvent(el[i],type,fn);
}
}else{
el.attachEvent(‘on’+type,function(){
return fn.call(el,window.event);
});
}
};
}
})();

          addEvent(el[i], type, fn);

设想包容性:
if (window.attachEvent)//兼容IE
{
//IE 的事件代码
}
else
{
//其它浏览器的事件代码
}

(9)addLoadEvent()
小编在此之前切磋过那函数,不细说,正是慢了壹些,各大类库基本无视它,自行完结domReady版本。上边是Simon威利斯on 的达成:

(9)addLoadEvent()
自我原先探讨过这函数,不细说,正是慢了一些,各大类库基本无视它,自行实现domReady版本。上面是西蒙威利斯on 的完结:

        }

地点有三种丰硕事件的章程,为了同一添加事件的措施,我们只好再另行写贰个通用的丰裕事件函数:

复制代码 代码如下:

复制代码 代码如下:

      } else {

版本一:

var addLoadEvent = function(fn) {
var oldonload = window.onload;
if (typeof window.onload != ‘function’) {
window.onload = fn;
}else {
window.onload = function() {
oldonload();
fn();
}
}
}

var addLoadEvent = function(fn) {
var oldonload = window.onload;
if (typeof window.onload != ‘function’) {
window.onload = fn;
}else {
window.onload = function() {
oldonload();
fn();
}
}
}

        el.addEventListener(type, fn, false);

复制代码 代码如下:

(8) getElementsByClass()
自个儿有收集癖,手头上拥有广大学本科子,最终集思广益自身达成了一个。上面是自己的落实:

(8) getElementsByClass()
自作者有收集癖,手头上拥有众多版本,最后集思广益本身完毕了二个。上面是本人的兑现:

      }

function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);//DOM2.0
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent(‘on‘ + evType, fn);//IE5+
return r;
}
else {
elm[‘on’ + evType] = fn;//DOM 0
}
}

复制代码 代码如下:

复制代码 代码如下:

    };

HTML5工作组的版本:

var getElementsByClassName = function (searchClass, node,tag) {
if(document.getElementsByClassName){
return document.getElementsByClassName(searchClass)
}else{
node = node || document;
tag = tag || “*”;
var classes = searchClass.split(” “),
elements = (tag === “*” && node.all)? node.all :
node.getElementsByTagName(tag),
patterns = [],
returnElements = [],
current,
match;
var i = classes.length;
while(–i >= 0){
patterns.push(new RegExp(“(^|\\s)” + classes[i] + “(\\s|$)”));
}
var j = elements.length;
while(–j >= 0){
current = elements[j];
match = false;
for(var k=0, kl=patterns.length; k<kl; k++){
match = patterns[k].test(current.className);
if (!match) break;
}
if (match) returnElements.push(current);
}
return returnElements;
}
}

var getElementsByClassName = function (searchClass, node,tag) {
if(document.getElementsByClassName){
return document.getElementsByClassName(searchClass)
}else{
node = node || document;
tag = tag || “*”;
var classes = searchClass.split(” “),
elements = (tag === “*” && node.all)? node.all :
node.getElementsByTagName(tag),
patterns = [],
returnElements = [],
current,
match;
var i = classes.length;
while(–i >= 0){
patterns.push(new RegExp(“(^|\\s)” + classes[i] + “(\\s|$)”));
}
var j = elements.length;
while(–j >= 0){
current = elements[j];
match = false;
for(var k=0, kl=patterns.length; k<kl; k++){
match = patterns[k].test(current.className);
if (!match) break;
}
if (match) returnElements.push(current);
}
return returnElements;
}
}

  } else {

复制代码 代码如下:

(7)cssQuery()
小名叫getElementsBySeletor,由Dean爱德华兹先河完结,Prototype.js,JQuery等类库都有照应落成,当中JQuery把它整合到$()选取器中,名声盖过其前辈。不过IE八等新锐浏览器已经完结querySelector与querySelectorAll方法,待到IE陆与IE7报销之日,它就没用了。无忧里有它的兑现原理教学。由于太长,就不粘出来了,具体可到最初的著小编网址看看。
(6)toggle()
用来显示或隐匿1个DOM成分。

(7)cssQuery()
外号字为getElementsBySeletor,由Dean爱德华兹开始达成,Prototype.js,JQuery等类库都有对应完成,个中JQuery把它结合到$()选取器中,名声盖过其前辈。可是IE八等后发先至浏览器已经落到实处querySelector与querySelectorAll方法,待到IE六与IE7报销之日,它就不行了。无忧里有它的贯彻原理教学。由于太长,就不粘出来了,具体可到最初的著笔者网址看看。
(6)toggle()
用来呈现或躲藏一个DOM成分。

    return function(el, type, fn) {

var addEvent=(function(){
if(document.addEventListener){
return function(el,type,fn){
if(el.length){
for(var i=0;i<el.length;i++){
addEvent(el[i],type,fn);
}
}else{
el.addEventListener(type,fn,false);
}
};
}else{
return function(el,type,fn){
if(el.length){
for(var i=0;i<el.length;i++){
addEvent(el[i],type,fn);
}
}else{
el.attachEvent(‘on‘+type,function(){
return fn.call(el,window.event);
});
}
};
}
})();

复制代码 代码如下:

复制代码 代码如下:

      if (el.length) {

方法三、事件 = 函数
例:obj.onclick = Foo;
那种绑定事件的方法,包容主流浏览器,但只要二个因素上助长数十次平等事件呢?

function toggle(obj) {
var el = document.getElementById(obj);
if ( el.style.display != ‘none’ ) {
el.style.display = ‘none’;
}
else {
el.style.display = ”;
}
}

function toggle(obj) {
var el = document.getElementById(obj);
if ( el.style.display != ‘none’ ) {
el.style.display = ‘none’;
}
else {
el.style.display = ”;
}
}

        for (var i = 0; i < el.length; i++) {

复制代码 代码如下:

(5)insertAfter()
DOM只提供了insertBefore,大家很有不可缺少本人实现insertAfter。不过小编觉着
insertAdjacentElement是更好的挑三拣4,未来除此之外火狐别的浏览器都落到实处那些办法。上边是杰里米凯斯的本子:

(5)insertAfter()
DOM只提供了insertBefore,大家很有不可缺少自身完成insertAfter。不过作者以为
insertAdjacentElement是更好的采取,现在除此之外火狐别的浏览器都落到实处那几个方法。上面是杰里米凯斯的本子:

          addEvent(el[i], type, fn);

obj.onclick=method1;
obj.onclick=method2;
obj.onclick=method3;

复制代码 代码如下:

复制代码 代码如下:

        }

设若这么写,那么唯有最后绑定的轩然大波,那里是method三会被执行,此时理应用艺术2的措施开始展览事件的绑定

function insertAfter(parent, node, referenceNode) {
parent.insertBefore(node, referenceNode.nextSibling);
}

function insertAfter(parent, node, referenceNode) {
parent.insertBefore(node, referenceNode.nextSibling);
}

      } else {

区分IE陆、IE7、IE八之间的点子:

(4)inArray()
用于判断检查数组中是还是不是存在有个别值,上边方法取自Prototype类库。

(4)inArray()
用来判断检查数组中是不是留存有些值,上边方法取自Prototype类库。

        el.attachEvent(‘on’ + type,

复制代码 代码如下:

复制代码 代码如下:

复制代码 代码如下:

        function() {

var isIE=!!window.ActiveXObject;
var isIE6=isIE&&!window.XMLHttpRequest;
var isIE8=isIE&&!!document.documentMode;
var isIE7=isIE&&!isIE6&&!isIE8;
if (isIE){
  if (isIE6){
    alert(”ie6″);
  }else if (isIE8){
    alert(”ie8″);
  }else if (isIE7){
    alert(”ie7″);
  }
}

Array.prototype.inArray = function (value) {
for (var i=0,l = this.length ; i <l ; i++) {
if (this[i] === value) {
return true;
}
}
return false;
};

Array.prototype.inArray = function (value) {
for (var i=0,l = this.length ; i <l ; i++) {
if (this[i] === value) {
return true;
}
}
return false;
};

          return fn.call(el, window.event);

var obj =
document.getElementById(“obj”); obj.setAttribute(“onclick”,
“javascript:alert(‘测试’);”); 不过IE不帮忙用 setAttribute
设置有个别质量,…

另一个本子:

另3个本子:

        });

复制代码 代码如下:

复制代码 代码如下:

      }

var inArray = function (arr,value) {
for (var i=0,l = arr.length ; i <l ; i++) {
if (arr[i] === value) {
return true;
}
}
return false;
};

var inArray = function (arr,value) {
for (var i=0,l = arr.length ; i <l ; i++) {
if (arr[i] === value) {
return true;
}
}
return false;
};

    };

(3) getCookie(), setCookie(), deleteCookie()
做BBS与商业网址的相应常常选取,无理由每一趟都要让用户输入密码登录吧。我们须求信赖cookie达成活动登录作用。

(3) getCookie(), setCookie(), deleteCookie()
做BBS与商业网址的应当时时利用,无理由每便都要让用户输入密码登录吧。我们供给依靠cookie完成机关登录功用。

  }

复制代码 代码如下:

复制代码 代码如下:

})();

function getCookie( name ) {
var start = document.cookie.indexOf( name + “=” );
var len = start + name.length + 1;
if ( ( !start ) && ( name != document.cookie.substring( 0, name.length )
) ) {
return null;
}
if ( start == -1 ) return null;
var end = document.cookie.indexOf( ‘;’, len );
if ( end == -1 ) end = document.cookie.length;
return unescape( document.cookie.substring( len, end ) );
}
function setCookie( name, value, expires, path, domain, secure ) {
var today = new Date();
today.setTime( today.getTime() );
if ( expires ) {
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name+’=’+escape( value ) +
( ( expires ) ? ‘;expires=’+expires_date.toGMTString() : ” ) +
//expires.toGMTString()
( ( path ) ? ‘;path=’ + path : ” ) +
( ( domain ) ? ‘;domain=’ + domain : ” ) +
( ( secure ) ? ‘;secure’ : ” );
}
function deleteCookie( name, path, domain ) {
if ( getCookie( name ) ) document.cookie = name + ‘=’ +
( ( path ) ? ‘;path=’ + path : ”) +
( ( domain ) ? ‘;domain=’ + domain : ” ) +
‘;expires=Thu, 01-Jan-1970 00:00:01 GMT’;
}

function getCookie( name ) {
var start = document.cookie.indexOf( name + “=” );
var len = start + name.length + 1;
if ( ( !start ) && ( name != document.cookie.substring( 0, name.length )
) ) {
return null;
}
if ( start == -1 ) return null;
var end = document.cookie.indexOf( ‘;’, len );
if ( end == -1 ) end = document.cookie.length;
return unescape( document.cookie.substring( len, end ) );
}
function setCookie( name, value, expires, path, domain, secure ) {
var today = new Date();
today.setTime( today.getTime() );
if ( expires ) {
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name+’=’+escape( value ) +
( ( expires ) ? ‘;expires=’+expires_date.toGMTString() : ” ) +
//expires.toGMTString()
( ( path ) ? ‘;path=’ + path : ” ) +
( ( domain ) ? ‘;domain=’ + domain : ” ) +
( ( secure ) ? ‘;secure’ : ” );
}
function deleteCookie( name, path, domain ) {
if ( getCookie( name ) ) document.cookie = name + ‘=’ +
( ( path ) ? ‘;path=’ + path : ”) +
( ( domain ) ? ‘;domain=’ + domain : ” ) +
‘;expires=Thu, 01-Jan-1970 00:00:01 GMT’;
}

 

(2)getStyle()与setStyle()
全体UI控件都应该留存的函数,动态设置样式与收获样式。那么些能够写得相当的短,也能够写得相当长,但要精确取得样式,一个字:难!但小编发觉众多标题都以始于于IE,微软的开发职员好像从没打算提交getComputedStyle那样的函数,与之类似的currentStyle会再次回到auto,inhert,

‘等让你窘迫的值,那还并未有算上IE怪癖方式带来的难度啊!种种库的达成是不行长与难分离出来的,下边是自家完成的版本:

(2)getStyle()与setStyle()
全体UI控件都应当存在的函数,动态设置样式与收获样式。这么些能够写得非常的短,也足以写得相当短,但要精确取得样式,二个字:难!但本身发现众多难题都以从头于IE,微软的开发人士好像未有打算交由getComputedStyle那样的函数,与之接近的currentStyle会重临auto,inhert,

‘等让你为难的值,这还并未有算上IE怪癖格局带来的难度啊!各样库的落到实处是可怜长与难分离出来的,上面是自个儿达成的本子:

var dataInput = document.getElementById(‘data’),

复制代码 代码如下:

复制代码 代码如下:

   output = document.getElementById(‘fromEvent’),

function setStyle(el,prop,value){
if(prop == “opacity” && !+”\v1″){
//IE七 bug:filter 滤镜须要 hasLayout=true 方可实施(不然未有意义)
if (!el.currentStyle || !el.currentStyle.hasLayout) el.style.zoom = 1;
prop = “filter”;
if(!!window.XDomainRequest){
value
=”progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=”+value*100+”)”;
}else{
value =”alpha(opacity=”+value*100+”)”
}
}
el.style.cssText += ‘;’ + (prop+”:”+value);
}
function getStyle(el, style){
if(!+”\v1″){
style = style.replace(/\-(\w)/g, function(all, letter){
return letter.toUpperCase();
});
return el.currentStyle[style];
}else{
return document.defaultView.getComputedStyle(el,
null).getPropertyValue(style)
}
}

function setStyle(el,prop,value){
if(prop == “opacity” && !+”\v1″){
//IE柒 bug:filter 滤镜要求 hasLayout=true 方可实施(不然没有效应)
if (!el.currentStyle || !el.currentStyle.hasLayout) el.style.zoom = 1;
prop = “filter”;
if(!!window.XDomainRequest){
value
=”progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=”+value*100+”)”;
}else{
value =”alpha(opacity=”+value*100+”)”
}
}
el.style.cssText += ‘;’ + (prop+”:”+value);
}
function getStyle(el, style){
if(!+”\v1″){
style = style.replace(/\-(\w)/g, function(all, letter){
return letter.toUpperCase();
});
return el.currentStyle[style];
}else{
return document.defaultView.getComputedStyle(el,
null).getPropertyValue(style)
}
}

   save = document.getElementById(‘save’);

至于setStyle仍是能够看本人另一篇博文,终归未来安装的体制都以内联样式,与html混杂在协同。
(1)$()
实至名归,最昂贵的函数,能够省去多少流量啊。起始由Prototype.js达成的,那是洪荒时期遗留下来的珍兽,未来有比比皆是变种。

至于setStyle还足以看本人另一篇博文,毕竟以后安装的体制都以内联样式,与html混杂在壹道。
(1)$()
实至名归,最值钱的函数,能够省去多少流量啊。开始由Prototype.js落成的,那是洪荒时代遗留下来的珍兽,以后有好多变种。

addEvent(window, ‘storage’, function (event) {

4858美高梅 ,复制代码 代码如下:

复制代码 代码如下:

  if (event.key == ‘storage-event-test’) {

function $() {
var elements = [];
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == ‘string’)
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}

function $() {
var elements = [];
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == ‘string’)
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}

    output.innerHTML =”key:”+event.key+” —- old:”+event.oldValue+”
—- new:”+ event.newValue;

网上最流行的本子是斯科特Andrew的,听别人说javascript界曾进行一场较量(此事件大家得以在Pro Javascript
Techniques第七0页看到)或浏览PPK的…

网上最风靡的版本是ScottAndrew的,传说javascript界曾举行一场竞赛(此事件我们可以在Pro Javascript
Techniques第七0页看到)或浏览PPK的…

  }

});

addEvent(save, ‘click’, function () {

  localStorage.setItem(‘storage-event-test’, dataInput.innerHTML);

});

 

ps: storage事件以file://打开无效,必须在服务器环境下才能学有所成

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有