Common js aborda problemas de compatibilidad entre navegadores

Obtén estilo en línea

function getStyle(obj,attr){
    
      //获取非行间样式,obj是对象,attr是值
     if(obj.currentStyle){
    
                    //针对ie获取非行间样式
          return obj.currentStyle[attr];
      }else{
    
    
          return getComputedStyle(obj,false)[attr];   //针对非ie
        }
    }

Formas compatibles de obtener objetos de eventos

document.onclick=function(eve){
    
    
        var e=eve || window.event;
        console.log(e);
    }

Métodos compatibles para la propagación de eventos

function stopBubble(e){
    
    
        if(e.stopPropagation){
    
    
            e.stopPropagation();
        }else{
    
    
            e.cancelBubble = true;//兼容ie
        }
    }

Métodos compatibles para evitar el comportamiento predeterminado del navegador

 if( e.preventDefault ){
    
    
        e.preventDefault();
    }else{
    
    
        window.event.returnValue = false;//ie
    }

Formas compatibles de configurar y eliminar eventos de monitoreo

// obj为dom对象 inci为事件名称 比如click back为回调函数
// attachEvent 是老版本浏览器使用的添加事件的方法,现在统一使用addEventListener
function addEvent(obj,inci,back){
    
    
        if(obj.addEventListener){
    
    
            obj.addEventListener(inci,back);
        }else if(obj.attachEvent){
    
    
            obj.attachEvent("on" + inci,back);
        }else{
    
    
            obj["on"+inci] = back;
        }
    }
// obj为dom对象 inci为事件名称 比如click back为回调函数
function removeEvent(obj,inci,back){
    
    
        if(obj.removeEventListener){
    
    
            obj.removeEventListener(inci,back,false);
        }else if(obj.detachEvent){
    
    
            obj.detachEvent("on" + inci,back);
        }else{
    
    
            obj["on"+inci] = null;
        }
    }

El valor clave del evento de teclado

// ie浏览器使用window.event.which
var eve = eve || window.event;
var keyC = eve.keyCode || eve.which;

Formato de tiempo

Utilice AAAA / MM / DD HH: mm: ss tanto como sea posible
porque el navegador Safari solo admite el formato AAAA / MM / DD HH: mm: ss y no admite AAAA-MM-DD HH: mm: ss

 "2016-06-10 12:00:00".split('-').join('/')

Obtener la altura de la barra de desplazamiento

function onscroll(){
    
    
    const scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
    return scrollTop 
}

El problema con innerText

Descripción del problema: innerText funciona normalmente en IE, pero innerText no funciona en FireFox.
Solución: use textContent en lugar de innerText en navegadores que no sean IE.

function setInnerText(dom,text) {
    
    
	if(navigator.appName.indexOf("Explorer") >-1){
    
     
		dom.innerText = text; 
	} else{
    
     
		dom.textContent = text; 
	}
}

Intenta no usar setAttribute ()

El uso de setAttribute para establecer los atributos de estilo y onclick no funciona en IE. Para lograr el efecto de ser compatible con varios navegadores, puede usar el método de notación de puntos para establecer las propiedades del objeto, las propiedades de la colección y las propiedades del evento del Elemento.

const dom = document.getElementById('element');
dom.style.color = "#00f";

Establecer el nombre de la clase

function AddClass(vName) {
    
    
	element.setAttribute("class", vName);
	element.setAttribute("className", vName); //for IE
}

problema de atributo input.type

En el navegador IE, input.type es un atributo de solo lectura y no se puede modificar. Si desea modificarlo, finalmente elimine el elemento de entrada original y agregue un nuevo elemento de entrada

Problema de asignación de ancho y alto de objeto

Descripción del problema: la declaración similar a obj.style.height = imgObj.height en FireFox no es válida.
Solución: use obj.style.height = imgObj.height + 'px';

Obtener dom por id

Descripción del problema: en IE, puede usar eval ("idName") o getElementById ("idName") para obtener el objeto HTML cuya identificación es idName; en Firefox, solo puede usar getElementById ("idName") para obtener el objeto HTML cuyo id es idName.
Solución: use getElementById ("idName") para obtener el objeto HTML cuyo id es idName.

Problemas de event.xy event.y

Descripción del problema: en IE, el objeto par tiene atributos xey, pero no tiene atributos pageX y pageY; en Firefox, el objeto par tiene atributos pageX y pageY, pero no tiene atributos xey.

var myX = event.x ? event.x : event.pageX; 
var myY = event.y ? event.y : event.pageY;

Obtener el elemento padre dom

En IE, use obj.parentElement u obj.parentNode para acceder al nodo principal de obj; en firefox, use obj.parentNode para acceder al nodo principal de obj.

const children = document.getElementsByClassName('children')[0];
const parent = children.parentNode

Acceda y configure los datos en el portapapeles

Para acceder a los datos en el portapapeles, puede usar el objeto clipboardData: en IE, este objeto es una propiedad del objeto de ventana; en Firefox, Chrome y Safar, este objeto es una propiedad del objeto de evento.

const setClipboardText = function (event, value) {
    
    
  if (event.clipboardData) {
    
    
    return event.clipboardData.setData("text/plain", value);
  } else if (window.clipboardData) {
    
    
    return window.clipboardData.setData("text", value);
  }
};

const getClipboardText = function (event) {
    
    
  const clipboardData = event.clipboardData || window.clipboardData;
  return clipboardData.getData("text");
};

Supongo que te gusta

Origin blog.csdn.net/glorydx/article/details/114787532
Recomendado
Clasificación