最近用到的浏览器兼容javascript总结
最近做了一些javascript相关的工作,把收获和大家分享一下,感谢下meizz,他的框架jsframework给我提供了许多现成的工具
title这个元素比较特殊
如果title中有经过htmlencode的字符,通过document.title获得的内容将会自动解码,并且在ie中通过给title加上一个id然后用document.getElementById(titleid).innerHTML来获得其中内容也仍然是已经解码的,而firefox则不会
document.getElementById("disp2").value=document.getElementById("tt").innerHTML;
document.getElementById("disp3").value=document.getElementById("dd").innerHTML;</script></body></html>
ie中的结果
firefox的结果
xhtml不支持document.body.scrollTop
当为html文档加上如下头以支持xhtml过渡标准时候,使用document.body.scrollTop值始终为0
这是document.body.scrollTop始终为0,这时需要用document.documentElement.scrollTop才能获得正确的值
而如果不加xhtml的申明,document.documentElement.scrollTop将为0
下面这个getScrollXY()方法可以包装这个变化
x=document.body.scrollLeft;
y=document.body.scrollTop;
}else{
x=document.documentElement.scrollLeft;
y=document.documentElement.scrollTop;
}return{x:x,y:y};
}functiononClick(){
document.getElementById("disp1").value=getScrollXY().x;
document.getElementById("disp2").value=getScrollXY().y;
}</script></body></html>
firefox的outerHTML
firefox没有outerHTML这个很有用的属性,用下面这个方法可以让你的firefox也具有这个属性
HTMLElement.prototype.__defineGetter__("outerHTML",function()
{vara=this.attributes, str="<"+this.tagName, i=0;for(;i<a.length;i++)if(a[i].specified) str+=""+a[i].name+'="'+a[i].value+'"';if(!this.canHaveChildren)returnstr+"/>";returnstr+">"+this.innerHTML+"</"+this.tagName+">";
});
HTMLElement.prototype.__defineGetter__(
"canHaveChildren",function(){switch(this.tagName.toLowerCase())
{case"area":case"base":case"basefont":case"col":case"frame":case"hr":case"img":case"br":case"input":case"link":case"meta":case"isindex":case"param":returnfalse;
}returntrue;
});
}
firefox和ie的事件
firefox和ie的事件对象稍微不同,比方说下面这个在ie下获得鼠标位置的方法
alert(event.clientX);
}
</script>需要改成
<button οnclick="onClick(event)">获得OuterHTML</button>
<script type="text/javascript">
function onclick(event){
alert(event.clientX);
}
</script>
才能在两种浏览器下使用
children与childNodes
ie提供的children,childNodes和firefox下的childNodes的行为是有区别的,firefox下childNodes会把换行和空白字符都算作父节点的子节点,而ie的childNodes和children不会
比如
<div id="dd">
<div>yizhu2000</div>
</div>
id为dd的div在ie下用childNodes查看,其子节点数为1,而ff下为三,我们可以从ff的dom查看器里面看到他的childNodes为["\n ", div, "\n"]
要在ff下模拟children的属性我们可以这样做
HTMLElement.prototype.__defineGetter__(
"children",function(){for(vara=[],j=0,n,i=0; i<this.childNodes.length; i++){
n=this.childNodes[i];if(n.nodeType==1){a[j++]=n;if(n.name){if(!a[n.name])a[n.name]=[]; a[n.name][a[n.name].length]=n;}if(n.id) a[n.id]=n;}}returna;
});
}
几个有用的工具函数
在ff下模拟ie的insertAdjacentHTML
HTMLElement.prototype.insertAdjacentHTML
=function(where, html){vare=this.ownerDocument.createRange();
e.setStartBefore(this);
e=e.createContextualFragment(html);switch(where)
{case'beforeBegin':this.parentNode.insertBefore(e,this);break;case'afterBegin':this.insertBefore(e,this.firstChild);break;case'beforeEnd':this.appendChild(e);break;case'afterEnd':if(!this.nextSibling)this.parentNode.appendChild(e);elsethis.parentNode.insertBefore(e,this.nextSibling);break;
}
};
}
模拟DotNet的string.format
{if(arguments.length==0)returnthis;for(vars=this, i=0; i<arguments.length; i++)
s=s.replace(newRegExp("\\{"+i+"\\}","g"), arguments[i]);returns;
};
这样我们就可以在程序里使用诸如:
"username:{0} nickname {1}".format("yizhu2000","二毛五")
资源
meizz的blog http://blog.csdn.net/meizz/
最近用到的浏览器兼容javascript总结相关推荐
- 分享一个帮助你自定义标签并且兼容现代浏览器的javascript类库 : X-tag
为什么80%的码农都做不了架构师?>>> 日期:2012-6-26 来源:GBin1.com 今天我们介绍一个能够帮助你自定义标签的js类库:x-tag,使用这个类库可以快速 ...
- JavaScript多浏览器兼容
Javascript 多浏览器兼容 一.document.formName.item("itemName") 问题 问题说明:IE下,可以使用 document.formName. ...
- JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题的解决方法
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题的解决方法 参考文章: (1)JS IOS/iPhone的Safari浏览器不兼容Javascript中的D ...
- JavaScript解决常见浏览器兼容问题
JavaScript解决常见浏览器兼容问题 我们提倡尽可能使用CSS,而且我们常常能做到这一点.现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计.但是有时候,某些网页元素在 ...
- WEB浏览器兼容(转)
这是我总结多年的一个小文档,最近看见有人咨询浏览器兼容的问题,就贡献出来. 并不一定全,有的也可能不准确,比如新出的IE8.Chrome等都没有太多涉及,虽然最近做的一些项目也兼容了IE8.Chrom ...
- html5新特性 移除哪些,html5\CSS3有哪些新特性、移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?...
(1)HTML5现在已经不是SGML的子集,主要是关于图像,位置,存储,地理定位等功能的增加. 绘画canvas元素: 用于媒介回放的video和audio元素: 本地离线存储localStorage ...
- HTML5 标签、事件句柄属性以及浏览器兼容情况速查手册
随着主流浏览器对 HTML5 的不断支持和完善,越来越多的开发者开始使用 HTML5 来开发各种功能强大的 Web 应用程序,HTML5 正引领互联网新革命.为了方便大家更好的学习 HTML5,今天这 ...
- 360安全浏览器兼容模式怎么设置_测试新手一定要知道:最实用的Web兼容性测试经验都在这...
在日常工作中,我们经常碰到网页不兼容的问题.我们之所以要做兼容性测试,目的在于保证待测试项目在不同的操作系统平台上正常运行. 主要包括待测试项目能在同一操作系统平台的不同版本上正常运行:待测试项目能与 ...
- 第四节:教你如何快速让浏览器兼容ES6特性
写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节前端君会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用 ...
最新文章
- 神经网络debug太难了,这里有六个实用技巧
- bash--shell高级编程-变量的替换
- PWN-PRACTICE-BUUCTF-18
- 三言两语话敏捷(2) - 持续集成
- [GCN] 代码解析 of GitHub:Semi-supervised classification with graph convolutional networks
- 给android app添加注册机功能
- atitit.web原理 理论attilax总结
- java 反序列化 怎么知道类_理解java中的序列化与反序列化
- 校园卡系统mysql与java结合_基于Java+JSP+Mysq+Servletl的校园卡一卡通管理系统
- html自动播放音乐播放器代码,[界面设计] 关于HTML 音乐播放器代码|音乐播放器网页代码大全(转)...
- VMware Workstation Pro下载密钥
- 线性表的链式存储结构及操作的实现
- freeswitch呼叫系统
- Fragment运行时错误
- 深入理解C语言小括号用法
- 巨好用的数学公式编辑器安装教程
- 自我管理--做事要有明确的时间观念
- 自兴动脑人工智能课程学习笔记一:机器学习
- 什么软件可以搜索python答案_什的组词
- 2.4-关键点Keypoints
热门文章
- python两个时间点比较大小_python中如何比较两个时间点
- update core.php,WordPress更新失败-这通常是由于文件权限不一致所致。:wp-admin/includes/update-core.php...
- Spring Boot的RestTemplate 之exchange方法
- mysql sql语句提升_mysql基本sql语句大全(提升用语篇)
- ant部署web工程模板
- 表字段出现oracle sql语句关键字时
- oracle复制表结构与表数据
- 一次SpringBoot AutoWired 注入服务为null的事件
- springboot响应结果超长(7.8M)浏览器无法接收
- supermap试用许可过期如何重新申请