document.getElementById no parece funcionar en todos los navegadores (me refiero a algunos antiguos) y estoy seguro de que hay desarrolladores que no son conscientes de esto.

¿Qué soluciones sugerirías para que sea un navegador cruzado?

Gracias

6
Sarfraz 22 dic. 2009 a las 13:57

4 respuestas

La mejor respuesta

Si document.getElementById no funciona, entonces tampoco:

  • Lo estás haciendo mal (HTML no válido, intentando acceder a nombres en lugar de ID, etc.)

O

  • Estás trabajando con Netscape 4.xy Internet Explorer 4.x

Hay tres formas de lidiar con los navegadores de esta época.

  • Dile a la gente que actualice. Son pesadillas sin mantenimiento, llenas de agujeros de seguridad para usuarios y autores por igual.
  • Construya sobre cosas que funcionan y asegúrese de que su JS verifique la existencia de getElementById y amigos antes de intentar usarlos (if (!document.getElementById) { return false; /* Insufficient DOM to bother with JS here */ })
  • Obtenga información sobre document.all y document.layers
9
Quentin 22 dic. 2009 a las 11:03
function getDOM() {
    if (document.getElementById) {
        return document.getElementById; 
    }

    var window_document = window.document || {};
    var elements = window_document.all || window_document.layers;
    if(elements) {
        return function(x) { return elements[x]; }
    }

    // everything failed
    throw new InternalError('No means to "getElementById"');
}

... entonces

var getElementById;
try {
    getElementById = getDOM();
} catch(err) {
    alert(err);
}
// implicit 0K
var oHTMLElement = getElementById('#main');
0
percebus 2 jun. 2016 a las 16:48
getElemID(obj){

if(document.getElementByID){
 return document.getElementByID(obj);
}

 else if (document.all){
  return document.all[obj];
  }

  else if (document.layers){
     return  document.layers[obj];
     }

  else {
       alert("Could not find support");
       return false;
       }
}
1
Q_Mlilo 22 dic. 2009 a las 11:59

¿Está seguro de que no es este tipo de problema? Echa un vistazo, es interesante, no lo sabía antes.

Sin embargo, para complementar lo que ya sugiere David Dorward, debe escribir una función como la siguiente.

function getElement (id) {

  if (document.getElementById) {
    return document.getElementById(id);
  }

  else if (document.all) {
    return window.document.all[id];
  }

  else if (document.layers) {
    return window.document.layers[id];
  }
} 
4
Adeel Ansari 30 mar. 2015 a las 03:08