2010-09-25 48 views
1

我對Javascript和DOM有一個問題;下面的代碼不應該檢索正文中的三個foo:bar元素嗎?警報窗口顯示零。它不適用於我的任何瀏覽器(甚至沒有Chrome Canary)。感謝您的幫助,週末愉快。getElementsByTagNameNS in(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> 

回答

3

你很可能與服務的錯誤內容類型的文檔。瀏覽器必須將其視爲XML來識別名稱空間,因此您需要使用application/xhtml+xml或其他XML內容類型,而不是text/html

另外,您的文檔類型是錯誤的。如果你想使用DTD,那麼你將需要一個包含你在foo命名空間中使用的元素。如果你不這樣做,那麼就去除Doctype--它對XML文檔中的呈現模式沒有影響(再次,text/html文檔被視爲標籤湯,而不是XML)。

+0

謝謝大衛多爾沃德,你是完全正確的;我正在處理本地文件,所以我只需要使用.xhtml擴展名重命名文件。謝謝! --Dario – damix911 2010-09-25 12:31:55