2009-12-22 3 views
6

document.getElementById scheint nicht über alle Browser (ich meine einige alte) zu arbeiten und ich bin sicher, dass es Entwickler gibt, die sich dessen nicht bewusst sind.JS: Wie man document.getElementById cross-browser macht?

Welche Lösungen würden Sie vorschlagen, um es browserübergreifend zu machen?

Dank

+3

'document.getElementById' ist act Natürlich eines der wenigen Dinge, die über eine breite Palette von Browsern funktioniert, im Grunde alles aus den letzten * mehreren * Jahren, einschließlich IE6. Welche spezifischen Browser versuchen Sie zu unterstützen, die es nicht implementieren? –

+3

Bitte geben Sie diesen Browser an, Danke –

+4

Wenn document.getElementById nicht unterstützt wird, kümmern Sie sich nicht um Javascript für diesen Browser. – kgiannakakis

Antwort

9

Wenn document.getElementById nicht funktioniert dann entweder:

  • Sie tun es falsch (ungültig HTML, versuchen Namen zuzugreifen statt IDs, etc.)

oder

  • Sie arbeiten mit Netscape 4.x und Internet Explorer 4.x

Es gibt drei Möglichkeiten, mit Browsern dieser Ära umzugehen.

  • Bitten Sie die Leute zu aktualisieren. Sie werden nicht gepflegt, Sicherheitslücken Alpträume für Benutzer und Autor gleichermaßen.
  • Build on stuff that works und stellen Sie sicher, dass Ihre JS überprüft das Vorhandensein von getElementById und Freunde, bevor Sie versuchen, sie zu nutzen (if (!document.getElementById) { return false; /* Insufficient DOM to bother with JS here */ })
  • Erfahren Sie mehr über document.all und document.layers
4

Sind Sie sicher, dass seine nicht this kind of problem? Schau es dir interessant an, das wusste ich vorher nicht.

Um jedoch zu ergänzen, was bereits von David Dorward vorgeschlagen wird, schreiben Sie eine Funktion wie unten.

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"'); 
} 

... dann

var getElementById; 
try { 
    getElementById = getDOM(); 
} catch(err) { 
    alert(err); 
} 
// implicit 0K 
var oHTMLElement = getElementById('#main');