今天在完成前端的简单练习时发现了一些兼容性的问题,百度后得以解决.
这里主要讨论Firefox与Chrome的兼容性问题.javascript
在javascript中, 为了获取节点的文本, 咱们能够考虑使用节点的textContent
、或者innerText
,
然而,二者都并不能很好对全部浏览器进行兼容.html
为了保证兼容性, 能够经过自定义的函数来解决;从另外一位博主中找到了可借鉴的代码:前端
var div = document.getElementById("content"); function getInnerText(element) { return (typeof element.textContent == "string") ? element.textContent : element.innerText; } function setInnerText(element, text) { if (typeof element.textContent == "string") { element.textContent = text; } else { element.innerText = text; } } setInnerText(div, "Hello world!"); alert(getInnerText(div)); //"Hello world!"
相关文档: MDN textContent;java
开发过程当中,咱们会给节点添加事件监听器,例如:浏览器
element.addEventListener("click", HandleClick); function HandleClick() { console.log(event.target); }
为了在HandleClick()
函数中获取到触发该函数的对象,咱们可能会用到event.target
, 这段代码能够在Chrome上正常运行,但在Firefox中出现报错,
控制台将显示不存在event对象.函数
说明: Firefox的event只能在事件发生的现场使用(来自百度).code
解决方法:htm
1.咱们能够经过修改html标签, 传递event参数给相应的函数:对象
<button onclick = "HandleClick(event)">
blog
这样便获取了event, 接下来就能够在HandleClick()函数中愉快地使用event了;(固然,event的某些属性兼容性也须要另外考虑)
2.不传递event对象, 直接在 HandleClick()函数中获取;
代码来自另外一位博主:
unction HandleClick() { var evt = window.event || arguments.callee.caller.arguments[0]; // 获取event对象 var src = evt.srcElement || evt.target; // 获取触发事件的源对象 var iKeyCode = evt.keyCode || evt.which; //获取按钮代码 alert(src.value); // 打印该对象的value属性 if (window.navigator.userAgent.indexOf("IE")>=1){ evt.keyCode =0; evt.returnValue=false; }else{ evt.preventDefault(); } }
此时咱们的html文件中不须要传递event给HandleClick函数, 以下:
<button onclick = "HandleClick()"
参考: