La méthode document.getElementById est-elle prise en charge sur DOM analysée à partir de chaînes XML à l'aide de la méthode DOMParser dans Mozilla? Je fais une extension Mozilla qui lit un fichier xml et utilise DOM Parser pour convertir le xml en un élément DOM et essaie d'obtenir des éléments par Id. La méthode getElementsByTagName fonctionne mais pas getElementById. Il revient toujours nulle.
function (xmlString) { var parser = new DOMParser(); var doc = parser.parseFromString(xmlString, "text/xml"); var aNodes = doc.getElementsByTagName("nodeTag"); for(var i=0; i<aNodes.length; ++i) { var id = aNodes[i].getAttribute('id'); var resultNode = doc.getElementById(id); alert(id); alert(resultNode); } }
J'ai essayé le code ci-dessus. Alerte (id) renvoie l'identifiant approprié, où comme alerte (resultNode) renvoie chaque fois nulle.
Non, document.getElementById
ne fonctionne généralement pas sur des documents XML arbitraires.
Dans les navigateurs récents (p. Ex. Firefox 3.5 et versions ultérieures), vous pouvez utiliser document.querySelector
place:
var resultNode = doc.querySelector("[id=" + id + "]");
Si vous souhaitez une solution qui rend effectivement la méthode getElementById () utilisable (ce que vous devriez, c'est beaucoup plus rapide et plus polyvalent) et vous avez accès à la DTD, ajoutez la ligne suivante:
<!ATTLIST client id ID #IMPLIED >
Si vous n'utilisez pas encore une DTD, ajoutez-le simplement au document xml directement après l'instruction <?xml version= \"1.0\"?>
:
<!DOCTYPE clients [ <!ATTLIST client id ID #IMPLIED > ]>
Dans cet exemple, "clients" est la racine de mon fichier xml et "client" est l'élément auquel je souhaite attacher des identifiants. Vous pouvez ajouter plusieurs instructions "ATTLIST" pour d'autres éléments que vous souhaitez ajouter des ID à d'autres types d'éléments.
J'ai testé ceci en safari, chrome et firefox. Fonctionne parfaitement.