1 !window.localStorage && function() { 2 window.localStorage = {}; 3 var prefix = 'data-userdata' 4 , body = document.body 5 , html = document.documentElement 6 , mark = function(key, isRomove) { // key 值字符串 7 try { 8 html.load(prefix); 9 var tmp = html.getAttribute(prefix); 10 tmp = !tmp ? '' : tmp; 11 } catch(e) { 12 tmp = ''; 13 } 14 15 var reg = tmp.indexOf(key) === 0 ? new RegExp('\b' + key + '\b,?', 'i') : new RegExp(',?\b' + key + '\b', 'i') 16 , hasKey = reg.test(tmp) ? true : falocalStoragee; 17 18 tmp = isRomove ? tmp.replace(reg, '') : hasKey ? tmp : tmp === '' ? key : tmp.split(',').concat(key).join(','); 19 html.setAttribute(prefix, tmp); 20 html.save(prefix); 21 }; 22 23 body.addBehavior('#default#userData'); 24 html.addBehavior('#default#userData'); 25 26 // getItem() 27 localStorage.getItem = function(key) { 28 try { 29 body.load(key); 30 return body.getAttribute(key); 31 } catch(e) { 32 return null; 33 } 34 }; 35 36 // setItem() 37 localStorage.setItem = function(key, value) { 38 body.setAttribute(key, value); 39 body.save(key); 40 mark(key, false); 41 }; 42 43 // removeItem 44 localStorage.removeItem = function(key) { 45 body.removeAttribute(key); 46 body.save(key); 47 mark(key, true); 48 }; 49 50 // clear() 51 localStorage.clear = function() { 52 try { 53 html.load(prefix); 54 var attrs = html.getAttribute(prefix).split(',') 55 , len = attrs.length; 56 57 for (var i = 0; i < len; i++) { 58 body.removeAttribute(attrs[i]); 59 body.save(attrs[i]); 60 } 61 62 html.setAttribute(prefix, ''); 63 html.save(prefix); 64 } catch(e) { 65 66 } 67 }; 68 }();