2010-09-25 5 views
1

J'ai une question sur Javascript et DOM; le code suivant ne devrait-il pas récupérer les trois éléments de foo: bar dans le corps? La fenêtre d'alerte affiche zéro. Il ne fonctionne pas dans tous les navigateurs que j'ai (même pas Chrome Canary). Merci de votre aide, bonne fin de semaine.getElementsByTagNameNS dans les documents (X) HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.com"> 
    <head> 
     <title>Hello!</title> 

     <script type="text/javascript"> 
     function bodyLoad() { 
      var extElements = document.getElementsByTagNameNS('http://foo.com', 'bar'); 

      alert(extElements.length); 
     } 
     </script> 
    </head> 

    <body onload="bodyLoad();"> 
     <foo:bar>First Foo-Bar</foo:bar> 
     <foo:bar>Second Foo-Bar</foo:bar> 
     <foo:bar>Third Foo-Bar</foo:bar> 
    </body> 
</html> 

Répondre

3

Vous servez probablement le document avec le mauvais type de contenu. Le navigateur doit le traiter en XML pour que les espaces de noms soient reconnus. Vous devez donc utiliser application/xhtml+xml ou un autre type de contenu XML, et non text/html. En outre, votre Doctype est erroné. Si vous souhaitez utiliser une DTD, vous en aurez besoin d'une qui inclut les éléments que vous utilisez dans l'espace de noms foo. Si ce n'est pas le cas, alors il suffit de se débarrasser du Doctype - cela n'a aucune incidence sur le mode de rendu dans les documents XML (encore une fois, les documents text/html sont traités comme des tags tag, pas XML).

+0

Merci David Dorward, vous avez totalement raison; Je travaillais avec des fichiers locaux, donc je devais simplement renommer le fichier avec l'extension .xhtml. Je vous remercie! --Dario – damix911

Questions connexes