2009-12-22 9 views
6

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.JS: ¿Cómo hacer document.getElementById cross-browser?

¿Qué soluciones sugerirías para hacerlo entre navegadores?

Gracias

+3

'document.getElementById' es actuar ualmente es una de las pocas cosas que funciona en una amplia gama de navegadores, básicamente cualquier cosa desde los últimos * varios * años, incluido IE6. ¿Qué navegador (s) específico (s) intentas soportar que no lo implemente? –

+3

Especifique ese navegador, Gracias –

+4

Si document.getElementById no es compatible, no se moleste con Javascript para ese navegador. – kgiannakakis

Respuesta

9

Si document.getElementById no funciona entonces:

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

o

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

Hay tres formas de lidiar con navegadores de esta era.

  • Dígale a las personas para actualizar. No son mantenidas, pesadillas de seguridad montadas para el usuario y el autor por igual.
  • Build on stuff that works y asegúrese de que JS comprueba la existencia de getElementById y amigos antes de tratar de usarlos (if (!document.getElementById) { return false; /* Insufficient DOM to bother with JS here */ })
  • Más información sobre los document.all y document.layers
4

¿Seguro que no es this kind of problem? Echar un vistazo es interesante, yo no sabía eso antes.

Sin embargo, para complementar lo ya sugerido por David Dorward, usted escribe 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]; 
    } 
} 
1
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; 
     } 
} 
0
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'); 
Cuestiones relacionadas