2011-01-23 166 views
1

我找過一些網站的代碼審查和已經注意到了<ul>中所使用的屬性「部位」,例如:「site」元素屬性 - 它是什麼?

<li site:bluray="154" site:ds="91" site:dvd="345" site:pc="77" site:ps3="248" site:psp="49" site:wii="153" site:xbox360="216" ><a href="#">In Stock</a></li> 

我can'y找到任何資源來解釋這是什麼 - 不任何人都知道上述做了什麼?

非常感謝

+3

看起來像一個XML名稱空間(http://en.wikipedia.org/wiki/XML_namespace)。你有這個片段最初的URL嗎? – 2011-01-23 16:12:50

+0

謝謝,它來自這個網站:http://www.shopto.net/ – Dave 2011-01-23 16:16:33

+0

看到我的編輯,快速的源代碼搜索透露了這個祕密。 :)順便說一句piquadrat不會看到你的評論,除非你使用`@`來通知..例如`@ piq`會在你下次發表評論時向他發送通知。 – 2011-01-23 16:30:49

回答

1

這些都是增加(可能由動態服務器端代碼)自定義屬性爲<li>元素。

它本身並不做任何事情,這就像給ID相同的元件, - 一些數據,可能會或可能不會被一些其他的代碼使用。

良好的猜測是,該網站有一些客戶端腳本識別列表項內的嵌套鏈接上點擊,取出來的數據列表項元素,並建立正確的URL或發送正確的AJAX請求服務器或者其他數據。

研究客戶端腳本可以讓您更好地理解這些屬性背後的真正目的。 :)

編輯:在您的情況,JS文件http://media1.shopto.net/scripts/site.js是使用這些屬性的基礎上動態鏈接的href,這裏是代碼從該文件相關的塊:

// The current href on each link needs to have the platform pre-pended. 
        // So store the current href before we change it. 
        link.submenu.getElements('ul.category a').each(function(sublink) { 
         var count = sublink.getParent().get('site:'+platform.replace('%20','')); 

         if(count==null && !sublink.getParent().get('site:all')) 
         { 
          sublink.getParent().removeChild(sublink); 
         } else { 
          sublink.set('href', href + sublink.get('href').replace('#','')); 

/* 
          if(count!=null) 
          { 
           sublink.set('text',sublink.get('text') + ' (' + count + ')'); 
          } 
*/ 
         } 
        }); 
0

site只是一個命名空間前綴爲每XML Namespaces

在通過XML隱含的數據模型,XML文檔包含 元素樹。每個元素都有一個元素類型名稱(有時稱爲 標籤名稱)和一組屬性;每個屬性由名稱 和一個值組成。應用程序通常使用元素類型名稱 以及元素的屬性來確定如何處理元素 。在沒有名稱空間的XML 1.0中,元素類型名稱和 屬性名稱是使用受限制的 字符的非結構化字符串,與編程語言中的標識符類似。我會撥打 這些名字的本地名稱。這在像Web這樣的分佈式環境中是有問題的。一個XML文檔可能使用part元素來描述 部分書籍,另一個可能使用part元素來描述 部分汽車。 XML應用程序無法知道如何處理零件元素,除非它具有 文檔外部的某些其他信息。

的XML命名空間建議嘗試通過 改善這種情況延伸的數據模型以允許元件類型名稱和屬性名稱 與URI來限定。因此,描述汽車的零件 的文件可以使用由一個URI限定的part;以及 描述的部分書籍可以使用part由另一個URI限定的文檔。我將 稱爲一個通用的 名稱的本地名稱和合格URI的組合。URI在通用名稱中的作用純粹是爲了允許 應用程序識別名稱。關於由URI標識的 資源沒有任何保證。 XML名稱空間建議 不要求元素類型名稱和屬性名稱是通用的 名稱;他們也被允許成爲本地名稱。

所以<cars:part xmlns:cars="http://www.cars.com/xml"/>映射到

<{http://www.cars.com/xml}part/> 

採用cars(或site)作爲前綴僅僅是爲了方便。而且由於xmlns:僞屬性是可繼承的,所以如果祖先已經定義了前綴,則它不需要包含在元素中。

瞭解關於XML命名空間on Wikipedia的更多信息。

0

屬性名稱中的冒號將它排除 - 它幾乎肯定與XML名稱空間有關。

如果你看一下HTML頁面的頂部,你應該注意到兩件事:

首先,它應該有一個DOCTYPE標識爲XHTML。其次,它應該有一個名稱空間爲site的XML命名空間標識符(xmlns)。這將肯定地證實這就是它。

可以將任何您喜歡的屬性添加到HTML元素。這是非標準的,在某些情況下,您可能會發現瀏覽器不喜歡它 - 例如,如果您的文檔類型是XHTML,那麼瀏覽器應該強制您只使用允許的標準屬性。

對其他屬性使用XML名稱空間是解決此限制的常用方法。事實上,在XHTML中,這是你應該做的。

未來,隨着更多網站遷移到HTML5並遠離XHTML,您應該看到更少的內容。 HTML5通過恢復對自定義屬性的更自由形式和寬鬆的態度​​來消除所有這一切。 HTML5規範說明你可以在你的元素中使用你喜歡的任何屬性。如果你打算使用自定義屬性,那麼你應該使用data-作爲前綴,這有助於將它們與真實屬性區分開來,但是不必再擔心命名空間。

相關問題