以下内容为复制搬运以作记录。
01 为元素添加on方法
Element . prototype. on = Element . prototype. addEventListener;
NodeList . prototype. on = function ( event, fn ) { 、
[ ] [ 'forEach' ] . call ( this , function ( el ) {
el. on ( event, fn) ;
} ) ;
return this ;
} ;
02 为元素添加trigger方法
Element . prototype. trigger = function ( type, data ) {
var event = document. createEvent ( "HTMLEvents" ) ;
event. initEvent ( type, true , true ) ;
event. data = data || { } ;
event. eventName = type;
event. target = this ;
this . dispatchEvent ( event) ;
return this ;
} ;
NodeList . prototype. trigger = function ( event ) {
[ ] [ "forEach" ] . call ( this , function ( el ) {
el[ "trigger" ] ( event) ;
} ) ;
return this ;
} ;
03 转义html标签
function HtmlEncode ( text ) {
return text
. replace ( / & / g , "&" )
. replace ( / \" / g , '"' )
. replace ( / < / g , "<" )
. replace ( / > / g , ">" ) ;
}
04 HTML标签转义
function SaferHTML ( templateData ) {
var s = templateData[ 0 ] ;
for ( var i = 1 ; i < arguments. length; i++ ) {
var arg = String ( arguments[ i] ) ;
s += arg
. replace ( / & / g , "&" )
. replace ( / < / g , "<" )
. replace ( / > / g , ">" ) ;
s += templateData[ i] ;
}
return s;
}
var html = SaferHTML` <p>这是关于字符串模板的介绍</p> ` ;
05 跨浏览器绑定事件
function addEventSamp ( obj, evt, fn ) {
if ( ! oTarget) {
return ;
}
if ( obj. addEventListener) {
obj. addEventListener ( evt, fn, false ) ;
} else if ( obj. attachEvent) {
obj. attachEvent ( "on" + evt, fn) ;
} else {
oTarget[ "on" + sEvtType] = fn;
}
}
06 加入收藏夹
function addFavorite ( sURL, sTitle ) {
try {
window. external. addFavorite ( sURL, sTitle) ;
} catch ( e) {
try {
window. sidebar. addPanel ( sTitle, sURL, "" ) ;
} catch ( e) {
alert ( "加入收藏失败,请使用Ctrl+D进行添加" ) ;
}
}
}
07 提取页面代码中所有网址
var aa = document. documentElement. outerHTML
. match (
/ (url\(|src=|href=)[\"\']*([^\"\'\(\)\<\>\[\] ]+)[\"\'\)]*|(http:\/\/[\w\-\.]+[^\"\'\(\)\<\>\[\] ]+) / gi
)
. join ( "\r\n" )
. replace ( / ^(src=|href=|url\()[\"\']*|[\"\'\>\) ]*$ / gim , "" ) ;
alert ( aa) ;
08 动态加载脚本文件
function appendscript ( src, text, reload, charset ) {
var id = hash ( src + text) ;
if ( ! reload && in_array ( id, evalscripts) ) return ;
if ( reload && $ ( id) ) {
$ ( id) . parentNode. removeChild ( $ ( id) ) ;
}
evalscripts. push ( id) ;
var scriptNode = document. createElement ( "script" ) ;
scriptNode. type = "text/javascript" ;
scriptNode. id = id;
scriptNode. charset = charset
? charset
: BROWSER . firefox
? document. characterSet
: document. charset;
try {
if ( src) {
scriptNode. src = src;
scriptNode. onloadDone = false ;
scriptNode. onload = function ( ) {
scriptNode. onloadDone = true ;
JSLOADED [ src] = 1 ;
} ;
scriptNode. onreadystatechange = function ( ) {
if (
( scriptNode. readyState == "loaded" ||
scriptNode. readyState == "complete" ) &&
! scriptNode. onloadDone
) {
scriptNode. onloadDone = true ;
JSLOADED [ src] = 1 ;
}
} ;
} else if ( text) {
scriptNode. text = text;
}
document. getElementsByTagName ( "head" ) [ 0 ] . appendChild ( scriptNode) ;
} catch ( e) { }
}
09 返回顶部的通用方法
function backTop ( btnId ) {
var btn = document. getElementById ( btnId) ;
var d = document. documentElement;
var b = document. body;
window. onscroll = set;
btn. style. display = "none" ;
btn. onclick = function ( ) {
btn. style. display = "none" ;
window. onscroll = null ;
this . timer = setInterval ( function ( ) {
d. scrollTop -= Math. ceil ( ( d. scrollTop + b. scrollTop) * 0.1 ) ;
b. scrollTop -= Math. ceil ( ( d. scrollTop + b. scrollTop) * 0.1 ) ;
if ( d. scrollTop + b. scrollTop == 0 )
clearInterval ( btn. timer, ( window. onscroll = set) ) ;
} , 10 ) ;
} ;
function set ( ) {
btn. style. display = d. scrollTop + b. scrollTop > 100 ? "block" : "none" ;
}
}
backTop ( "goTop" ) ;
10 实现base64解码
function base64_decode ( data ) {
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ;
var o1,
o2,
o3,
h1,
h2,
h3,
h4,
bits,
i = 0 ,
ac = 0 ,
dec = "" ,
tmp_arr = [ ] ;
if ( ! data) {
return data;
}
data += "" ;
do {
h1 = b64. indexOf ( data. charAt ( i++ ) ) ;
h2 = b64. indexOf ( data. charAt ( i++ ) ) ;
h3 = b64. indexOf ( data. charAt ( i++ ) ) ;
h4 = b64. indexOf ( data. charAt ( i++ ) ) ;
bits = ( h1 << 18 ) | ( h2 << 12 ) | ( h3 << 6 ) | h4;
o1 = ( bits >> 16 ) & 0xff ;
o2 = ( bits >> 8 ) & 0xff ;
o3 = bits & 0xff ;
if ( h3 == 64 ) {
tmp_arr[ ac++ ] = String. fromCharCode ( o1) ;
} else if ( h4 == 64 ) {
tmp_arr[ ac++ ] = String. fromCharCode ( o1, o2) ;
} else {
tmp_arr[ ac++ ] = String. fromCharCode ( o1, o2, o3) ;
}
} while ( i < data. length) ;
dec = tmp_arr. join ( "" ) ;
dec = utf8_decode ( dec) ;
return dec;
}
11 确认是否是键盘有效输入值
function checkKey ( iKey ) {
if ( iKey == 32 || iKey == 229 ) {
return true ;
}
if ( iKey > 47 && iKey < 58 ) {
return true ;
}
if ( iKey > 64 && iKey < 91 ) {
return true ;
}
if ( iKey > 95 && iKey < 108 ) {
return true ;
}
if ( iKey > 108 && iKey < 112 ) {
return true ;
}
if ( iKey > 185 && iKey < 193 ) {
return true ;
}
if ( iKey > 218 && iKey < 223 ) {
return true ;
}
return false ;
}
12 全角半角转换
function chgCase ( sStr, iCase ) {
if (
typeof sStr != "string" ||
sStr. length <= 0 ||
! ( iCase === 0 || iCase == 1 )
) {
return sStr;
}
var i,
oRs = [ ] ,
iCode;
if ( iCase) {
for ( i = 0 ; i < sStr. length; i += 1 ) {
iCode = sStr. charCodeAt ( i) ;
if ( iCode == 32 ) {
iCode = 12288 ;
} else if ( iCode < 127 ) {
iCode += 65248 ;
}
oRs. push ( String. fromCharCode ( iCode) ) ;
}
} else {
for ( i = 0 ; i < sStr. length; i += 1 ) {
iCode = sStr. charCodeAt ( i) ;
if ( iCode == 12288 ) {
iCode = 32 ;
} else if ( iCode > 65280 && iCode < 65375 ) {
iCode -= 65248 ;
}
oRs. push ( String. fromCharCode ( iCode) ) ;
}
}
return oRs. join ( "" ) ;
}
13 版本对比
function compareVersion ( v1, v2 ) {
v1 = v1. split ( "." ) ;
v2 = v2. split ( "." ) ;
var len = Math. max ( v1. length, v2. length) ;
while ( v1. length < len) {
v1. push ( "0" ) ;
}
while ( v2. length < len) {
v2. push ( "0" ) ;
}
for ( var i = 0 ; i < len; i++ ) {
var num1 = parseInt ( v1[ i] ) ;
var num2 = parseInt ( v2[ i] ) ;
if ( num1 > num2) {
return 1 ;
} else if ( num1 < num2) {
return - 1 ;
}
}
return 0 ;
}
14 压缩CSS样式代码
function compressCss ( s ) {
s = s. replace ( / \/\*(.|\n)*?\*\/ / g , "" ) ;
s = s. replace ( / \s*([\{\}\:\;\,])\s* / g , "$1" ) ;
s = s. replace ( / \,[\s\.\#\d]*\{ / g , "{" ) ;
s = s. replace ( / ;\s*; / g , ";" ) ;
s = s. match ( / ^\s*(\S+(\s+\S+)*)\s*$ / ) ;
return s == null ? "" : s[ 1 ] ;
}
15 获取当前路径
var currentPageUrl = "" ;
if ( typeof this . href === "undefined" ) {
currentPageUrl = document. location. toString ( ) . toLowerCase ( ) ;
} else {
currentPageUrl = this . href. toString ( ) . toLowerCase ( ) ;
}
16 字符串长度截取
function cutstr ( str, len ) {
var temp,
icount = 0 ,
patrn = / [ ^ \x00- \xff] / ,
strre = "" ;
for ( var i = 0 ; i < str. length; i++ ) {
if ( icount < len - 1 ) {
temp = str. substr ( i, 1 ) ;
if ( patrn. exec ( temp) == null ) {
icount = icount + 1
} else {
icount = icount + 2
}
strre += temp
} else {
break ;
}
}
return strre + "..."
}
17 时间日期格式转换
Date . prototype. format = function ( formatStr ) {
var str = formatStr;
var Week = [ "日" , "一" , "二" , "三" , "四" , "五" , "六" ] ;
str = str. replace ( / yyyy|YYYY / , this . getFullYear ( ) ) ;
str = str. replace (
/ yy|YY / ,
this . getYear ( ) % 100 > 9
? ( this . getYear ( ) % 100 ) . toString ( )
: "0" + ( this . getYear ( ) % 100 )
) ;
str = str. replace (
/ MM / ,
this . getMonth ( ) + 1 > 9
? ( this . getMonth ( ) + 1 ) . toString ( )
: "0" + ( this . getMonth ( ) + 1 )
) ;
str = str. replace ( / M / g , this . getMonth ( ) + 1 ) ;
str = str. replace ( / w|W / g , Week[ this . getDay ( ) ] ) ;
str = str. replace (
/ dd|DD / ,
this . getDate ( ) > 9 ? this . getDate ( ) . toString ( ) : "0" + this . getDate ( )
) ;
str = str. replace ( / d|D / g , this . getDate ( ) ) ;
str = str. replace (
/ hh|HH / ,
this . getHours ( ) > 9 ? this . getHours ( ) . toString ( ) : "0" + this . getHours ( )
) ;
str = str. replace ( / h|H / g , this . getHours ( ) ) ;
str = str. replace (
/ mm / ,
this . getMinutes ( ) > 9
? this . getMinutes ( ) . toString ( )
: "0" + this . getMinutes ( )
) ;
str = str. replace ( / m / g , this . getMinutes ( ) ) ;
str = str. replace (
/ ss|SS / ,
this . getSeconds ( ) > 9
? this . getSeconds ( ) . toString ( )
: "0" + this . getSeconds ( )
) ;
str = str. replace ( / s|S / g , this . getSeconds ( ) ) ;
return str;
} ;
Date . prototype. format = function ( format ) {
var o = {
"M+" : this . getMonth ( ) + 1 ,
"d+" : this . getDate ( ) ,
"h+" : this . getHours ( ) ,
"m+" : this . getMinutes ( ) ,
"s+" : this . getSeconds ( ) ,
"q+" : Math. floor ( ( this . getMonth ( ) + 3 ) / 3 ) ,
S : this . getMilliseconds ( )
} ;
if ( / (y+) / . test ( format) )
format = format. replace (
RegExp. $1,
( this . getFullYear ( ) + "" ) . substr ( 4 - RegExp. $1. length)
) ;
for ( var k in o) {
if ( new RegExp ( "(" + k + ")" ) . test ( format) )
format = format. replace (
RegExp. $1,
RegExp. $1. length == 1 ? o[ k] : ( "00" + o[ k] ) . substr ( ( "" + o[ k] ) . length)
) ;
}
return format;
} ;
alert ( new Date ( ) . format ( "yyyy-MM-dd hh:mm:ss" ) ) ;
18 跨浏览器删除事件
function delEvt ( obj, evt, fn ) {
if ( ! obj) {
return ;
}
if ( obj. addEventListener) {
obj. addEventListener ( evt, fn, false ) ;
} else if ( oTarget. attachEvent) {
obj. attachEvent ( "on" + evt, fn) ;
} else {
obj[ "on" + evt] = fn;
}
}
19 判断是否以某个字符串结束
String . prototype. endWith = function ( s ) {
var d = this . length - s. length;
return d >= 0 && this . lastIndexOf ( s) == d;
} ;
20 返回脚本内容
function evalscript ( s ) {
if ( s. indexOf ( "<script" ) == - 1 ) return s;
var p = / <script[^\>]*?>([^\x00]*?)<\/script> / gi ;
var arr = [ ] ;
while ( ( arr = p. exec ( s) ) ) {
var p1 = / <script[^\>]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script> / i ;
var arr1 = [ ] ;
arr1 = p1. exec ( arr[ 0 ] ) ;
if ( arr1) {
appendscript ( arr1[ 1 ] , "" , arr1[ 2 ] , arr1[ 3 ] ) ;
} else {
p1 = / <script(.*?)>([^\x00]+?)<\/script> / i ;
arr1 = p1. exec ( arr[ 0 ] ) ;
appendscript ( "" , arr1[ 2 ] , arr1[ 1 ] . indexOf ( "reload=" ) != - 1 ) ;
}
}
return s;
}
21 格式化CSS样式代码
function formatCss ( s ) {
s = s. replace ( / \s*([\{\}\:\;\,])\s* / g , "$1" ) ;
s = s. replace ( / ;\s*; / g , ";" ) ;
s = s. replace ( / \,[\s\.\#\d]*{ / g , "{" ) ;
s = s. replace ( / ([^\s])\{([^\s]) / g , "$1 {\n\t$2" ) ;
s = s. replace ( / ([^\s])\}([^\n]*) / g , "$1\n}\n$2" ) ;
s = s. replace ( / ([^\s]);([^\s\}]) / g , "$1;\n\t$2" ) ;
return s;
}
22 获取cookie值
function getCookie ( name ) {
var arr = document. cookie. match ( new RegExp ( "(^| )" + name + "=([^;]*)(;|$)" ) ) ;
if ( arr != null ) return unescape ( arr[ 2 ] ) ;
return null ;
}
23 获得URL中GET参数值
function getGet ( ) {
querystr = window. location. href. split ( "?" ) ;
if ( querystr[ 1 ] ) {
GETs = querystr[ 1 ] . split ( "&" ) ;
GET = [ ] ;
for ( i = 0 ; i < GETs. length; i++ ) {
tmp_arr = GETs. split ( "=" ) ;
key = tmp_arr[ 0 ] ;
GET [ key] = tmp_arr[ 1 ] ;
}
}
return querystr[ 1 ] ;
}
24 获取移动设备初始化大小
function getInitZoom ( ) {
if ( ! this . _initZoom) {
var screenWidth = Math. min ( screen. height, screen. width) ;
if ( this . isAndroidMobileDevice ( ) && ! this . isNewChromeOnAndroid ( ) ) {
screenWidth = screenWidth / window. devicePixelRatio;
}
this . _initZoom = screenWidth / document. body. offsetWidth;
}
return this . _initZoom;
}
25 获取页面高度
function getPageHeight ( ) {
var g = document,
a = g. body,
f = g. documentElement,
d = g. compatMode == "BackCompat" ? a : g. documentElement;
return Math. max ( f. scrollHeight, a. scrollHeight, d. clientHeight) ;
}
26 获取页面scrollLeft
function getPageScrollLeft ( ) {
var a = document;
return a. documentElement. scrollLeft || a. body. scrollLeft;
}
27 获取页面scrollTop
function getPageScrollTop ( ) {
var a = document;
return a. documentElement. scrollTop || a. body. scrollTop;
}
28 获取页面可视宽度
function getPageViewWidth ( ) {
var d = document,
a = d. compatMode == "BackCompat" ? d. body : d. documentElement;
return a. clientWidth;
}
29 获取页面可视高度
function getPageViewHeight ( ) {
var d = document,
a = d. compatMode == "BackCompat" ? d. body : d. documentElement;
return a. clientHeight;
}
30 获取页面宽度
function getPageWidth ( ) {
var g = document,
a = g. body,
f = g. documentElement,
d = g. compatMode == "BackCompat" ? a : g. documentElement;
return Math. max ( f. scrollWidth, a. scrollWidth, d. clientWidth) ;
}
31 获取移动设备屏幕宽度
function getScreenWidth ( ) {
var smallerSide = Math. min ( screen. width, screen. height) ;
var fixViewPortsExperiment =
rendererModel. runningExperiments. FixViewport ||
rendererModel. runningExperiments. fixviewport;
var fixViewPortsExperimentRunning =
fixViewPortsExperiment && fixViewPortsExperiment. toLowerCase ( ) === "new" ;
if ( fixViewPortsExperiment) {
if ( this . isAndroidMobileDevice ( ) && ! this . isNewChromeOnAndroid ( ) ) {
smallerSide = smallerSide / window. devicePixelRatio;
}
}
return smallerSide;
}
32 获取移动设备最大化大小
function getZoom ( ) {
var screenWidth =
Math. abs ( window. orientation) === 90
? Math. max ( screen. height, screen. width)
: Math. min ( screen. height, screen. width) ;
if ( this . isAndroidMobileDevice ( ) && ! this . isNewChromeOnAndroid ( ) ) {
screenWidth = screenWidth / window. devicePixelRatio;
}
var FixViewPortsExperiment =
rendererModel. runningExperiments. FixViewport ||
rendererModel. runningExperiments. fixviewport;
var FixViewPortsExperimentRunning =
FixViewPortsExperiment &&
( FixViewPortsExperiment === "New" || FixViewPortsExperiment === "new" ) ;
if ( FixViewPortsExperimentRunning) {
return screenWidth / window. innerWidth;
} else {
return screenWidth / document. body. offsetWidth;
}
}
33 获取网页被卷去的位置
function getScrollXY ( ) {
return document. body. scrollTop
? {
x : document. body. scrollLeft,
y : document. body. scrollTop
}
: {
x : document. documentElement. scrollLeft,
y : document. documentElement. scrollTop
} ;
}
34 判断是否为数字类型
function isDigit ( value ) {
var patrn = / ^[0-9]*$ / ;
if ( patrn. exec ( value) == null || value == "" ) {
return false ;
} else {
return true ;
}
}
35 检验URL链接是否有效
function getUrlState ( URL ) {
var xmlhttp = new ActiveXObject ( "microsoft.xmlhttp" ) ;
xmlhttp. Open ( "GET" , URL , false ) ;
try {
xmlhttp. Send ( ) ;
} catch ( e) {
} finally {
var result = xmlhttp. responseText;
if ( result) {
if ( xmlhttp. Status == 200 ) {
return true ;
} else {
return false ;
}
} else {
return false ;
}
}
}
36 获取URL上的参数
export function getUrlParam ( name, type = "hash" ) {
let newName = name,
reg = new RegExp ( "(^|&)" + newName + "=([^&]*)(&|$)" , "i" ) ,
paramHash = window. location. hash. split ( "?" ) [ 1 ] || "" ,
paramSearch = window. location. search. split ( "?" ) [ 1 ] || "" ,
param;
type === "hash" ? ( param = paramHash) : ( param = paramSearch) ;
let result = param. match ( reg) ;
if ( result != null ) {
return result[ 2 ] . split ( "/" ) [ 0 ] ;
}
return null ;
}
37 获取窗体可见范围的宽与高
function getViewSize ( ) {
var de = document. documentElement;
var db = document. body;
var viewW = de. clientWidth == 0 ? db. clientWidth : de. clientWidth;
var viewH = de. clientHeight == 0 ? db. clientHeight : de. clientHeight;
return Array ( viewW, viewH) ;
}
38 判断是否安卓移动设备访问
function isAndroidMobileDevice ( ) {
return / android / i . test ( navigator. userAgent. toLowerCase ( ) ) ;
}
39 判断是否苹果移动设备访问
function isAppleMobileDevice ( ) {
return / iphone|ipod|ipad|Macintosh / i . test ( navigator. userAgent. toLowerCase ( ) ) ;
}
40 是否是某类手机型号
const isIphonex = ( ) => {
const xSeriesConfig = [
{
devicePixelRatio : 3 ,
width : 375 ,
height : 812
} ,
{
devicePixelRatio : 3 ,
width : 414 ,
height : 896
} ,
{
devicePixelRatio : 2 ,
width : 414 ,
height : 896
}
] ;
if ( typeof window !== "undefined" && window) {
const isIOS = / iphone / gi . test ( window. navigator. userAgent) ;
if ( ! isIOS) return false ;
const { devicePixelRatio, screen } = window;
const { width, height } = screen;
return xSeriesConfig. some (
item =>
item. devicePixelRatio === devicePixelRatio &&
item. width === width &&
item. height === height
) ;
}
return false ;
} ;
41 判断是否是移动设备访问
function isMobileUserAgent ( ) {
return / iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile / i . test (
window. navigator. userAgent. toLowerCase ( )
) ;
}
42 判断是否移动设备
function isMobile ( ) {
if ( typeof this . _isMobile === "boolean" ) {
return this . _isMobile;
}
var screenWidth = this . getScreenWidth ( ) ;
var fixViewPortsExperiment =
rendererModel. runningExperiments. FixViewport ||
rendererModel. runningExperiments. fixviewport;
var fixViewPortsExperimentRunning =
fixViewPortsExperiment && fixViewPortsExperiment. toLowerCase ( ) === "new" ;
if ( ! fixViewPortsExperiment) {
if ( ! this . isAppleMobileDevice ( ) ) {
screenWidth = screenWidth / window. devicePixelRatio;
}
}
var isMobileScreenSize = screenWidth < 600 ;
var isMobileUserAgent = false ;
this . _isMobile = isMobileScreenSize && this . isTouchScreen ( ) ;
return this . _isMobile;
}
43 判断是否手机号码
function isMobileNumber ( e ) {
var i =
"134,135,136,137,138,139,150,151,152,157,158,159,187,188,147,182,183,184,178" ,
n = "130,131,132,155,156,185,186,145,176" ,
a = "133,153,180,181,189,177,173,170" ,
o = e || "" ,
r = o. substring ( 0 , 3 ) ,
d = o. substring ( 0 , 4 ) ,
s =
! ! / ^1\d{10}$ / . test ( o) &&
( n. indexOf ( r) >= 0
? "联通"
: a. indexOf ( r) >= 0
? "电信"
: "1349" == d
? "电信"
: i. indexOf ( r) >= 0
? "移动"
: "未知" ) ;
return s;
}
44 判断鼠标是否移出事件
function isMouseOut ( e, handler ) {
if ( e. type !== "mouseout" ) {
return false ;
}
var reltg = e. relatedTarget
? e. relatedTarget
: e. type === "mouseout"
? e. toElement
: e. fromElement;
while ( reltg && reltg !== handler) {
reltg = reltg. parentNode;
}
return reltg !== handler;
}
45 判断是否Touch屏幕
function isTouchScreen ( ) {
return (
"ontouchstart" in window ||
( window. DocumentTouch && document instanceof DocumentTouch )
) ;
}
46 判断是否为网址
function isURL ( strUrl ) {
var regular = / ^\b(((https?|ftp):\/\/)?[-a-z0-9]+(\.[-a-z0-9]+)*\.(?:com|edu|gov|int|mil|net|org|biz|info|name|museum|asia|coop|aero|[a-z][a-z]|((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d))\b(\/[-a-z0-9_:\@&?=+,.!\/~%\$]*)?)$ / i ;
if ( regular. test ( strUrl) ) {
return true ;
} else {
return false ;
}
}
47 判断是否打开视窗
function isViewportOpen ( ) {
return ! ! document. getElementById ( "wixMobileViewport" ) ;
}
48 加载样式文件
function loadStyle ( url ) {
try {
document. createStyleSheet ( url) ;
} catch ( e) {
var cssLink = document. createElement ( "link" ) ;
cssLink. rel = "stylesheet" ;
cssLink. type = "text/css" ;
cssLink. href = url;
var head = document. getElementsByTagName ( "head" ) [ 0 ] ;
head. appendChild ( cssLink) ;
}
}
49 替换地址栏
function locationReplace ( url ) {
if ( history. replaceState) {
history. replaceState ( null , document. title, url) ;
history. go ( 0 ) ;
} else {
location. replace ( url) ;
}
}
50 解决offsetX兼容性问题
function getOffset ( e ) {
var target = e. target,
eventCoord,
pageCoord,
offsetCoord;
pageCoord = getPageCoord ( target) ;
eventCoord = {
X : window. pageXOffset + e. clientX,
Y : window. pageYOffset + e. clientY
} ;
offsetCoord = {
X : eventCoord. X - pageCoord. X ,
Y : eventCoord. Y - pageCoord. Y
} ;
return offsetCoord;
}
function getPageCoord ( element ) {
var coord = { X : 0 , Y : 0 } ;
while ( element) {
coord. X += element. offsetLeft;
coord. Y += element. offsetTop;
element = element. offsetParent;
}
return coord;
}