textContent、innerText 以及Event事件兼容性问题

今天在完成前端的简单练习时发现了一些兼容性的问题,百度后得以解决.
这里主要讨论Firefox与Chrome的兼容性问题.javascript

textContent与 innerText

在javascript中, 为了获取节点的文本, 咱们能够考虑使用节点的textContent、或者innerText,
然而,二者都并不能很好对全部浏览器进行兼容.html

  • textContent: 不支持低版本 IE; 兼容 Chrome / Firefox / Safari / Opera / IE9.
  • innerText: 不支持Firefox; 兼容其余浏览器;

为了保证兼容性, 能够经过自定义的函数来解决;从另外一位博主中找到了可借鉴的代码:前端

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

event的兼容性问题

开发过程当中,咱们会给节点添加事件监听器,例如:浏览器

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()"


参考:

相关文章
相关标签/搜索