Document.getElementsByTagName ("*") Ou document.all

document.getElementsByTagName("*") fonctionne pour IE / Firefox / Opera, mais ne fonctionne pas pour Chrome et Safari.

document.all fonctionne pour IE / Chrom / Safari, mais ne fonctionne pas pour Firefox.

Comment puis-je m'en occuper?

Essayez comme ceci:

 if (document.all !== undefined) { allElements = document.all; } else { allElements = document.getElementsByTagName("*"); } 

Ou une version plus courte

 allElements = document.all ? document.all : document.getElementsByTagName("*"); 

document.getElementsByTagName() fonctionne parfaitement dans tous les navigateurs modernes (tout plus nouveau que IE5).

Si cela ne semble pas fonctionner dans Chrome ou Safari, il est très probable que ce soit simplement un symptôme d'une erreur que vous rencontrez ailleurs.

J'avoue qu'il pourrait y avoir des technologies aujourd'hui, je ne sais pas si cela permet de faire ce genre de chose en format cross-browser, mais la façon dont j'ai toujours dû le faire dans le passé est d'avoir un contrôle de Une sorte de navigateur que vous utilisez.

Une solution plus simple, cependant, est d'essayer d'exécuter l'un d'entre eux, et si vous n'obtenez rien / nul / une erreur, utilisez l'autre.

Quoi qu'il en soit, si vous ne voulez vraiment pas vous occuper vous-même, vous devriez utiliser une bibliothèque qui traitera avec vous (par exemple, jQuery).

Bien que je ne vous encourage pas à faire un document. Tout cela implique que vous faites beaucoup d'analyse côté client qui n'est tout simplement pas nécessaire. Je comprends qu'il y a beaucoup de choses existantes, etc. Je voulais poster un peu Extension de mes pensées sur une méthode wrapper pour document.all.

 document.all = document.all || function(){ return document.getElementsByTagName("*"); }; 

Bien sûr, cela suppose que vous avez une fonction getElementsByTagName, ce qui devrait être le cas.

document.all doit être évité car il n'est pas conforme aux normes. Au lieu de cela, vous pouvez utiliser document.getElementById() pour le nœud particulier ou utiliser $("*") Pour sélectionner tous les éléments en utilisant jQuery.

Mais encore si vous souhaitez utiliser document.all, <!DOCTYPE> que la <!DOCTYPE> est supprimée de votre page, ainsi que l'attribut xmlns est également supprimé de votre <html> .

Changez quelque chose comme ceci:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> 

à:

 <html> 

Je l'ai testé sur FireFox 19.0.2 et document.all Tout fonctionne bien pour moi.

La raison: lorsque vous utilisez la <!DOCTYPE> vous indiquez au navigateur que votre page Web se plaint des normes qui vous indiquent de ne PAS utiliser le document.all dans votre script, de sorte que le navigateur ne l'autorise pas non plus.

Mais comme vous voulez l'utiliser, vous ne respectez évidemment pas les normes, ne vous dérangez même pas d'ajouter la <!DOCTYPE> autrement document.all ne fonctionnera pas.