2016-02-16 78 views
1

我有一個網站需要通過W3C驗證器上的每個錯誤。我遇到的一些錯誤與圖像的替代文字有關。我寫這一點,添加它的<head>W3C驗證器忽略jQuery和JavaScript更改後的更改

<script type="text/javascript"> 
     jQuery(document).ready(function($) { 

      $('img').each(function(){ 
       var $img = $(this); 
       var filename = $img.attr('src'); 
       $img.attr('alt', filename.substr(filename.lastIndexOf("/") + 1)); 
      }); 

     }); 
</script> 

但是,我看到W3驗證忽略我用JavaScript做任何變化,並採取了HTML頁面只是JavaScript的運行之前。類似的是當我加載一個JS的地圖和W3驗證器認爲它是一個空的元素。

有什麼辦法讓驗證器在檢查頁面之前等待嗎?

+6

沒有,因爲驗證是用來驗證你的HTML。您的HTML應該始終有效,當然_before_任何javascript - 這是因爲那些能力較差,禁用JavaScript的人不會看到您的更改,所以它只是欺騙驗證器。你的JS和你的HTML是分開的。 (還有一點:你已經試圖通過自動化值來欺騙alt標籤,但這不是重點 - alt標籤用於訪問,允許禁用圖片的人看到它們。無論如何,src將會在那裏,所以沒有必要這樣做) – somethinghere

回答

4

驗證HTML的目的是確保瀏覽器和其他工具(如網頁爬蟲)可以正確讀取它,並正確地符合HTML規範。當你的代碼運行時,已經發生了,而且瀏覽器處理的任何東西都已經被處理了,任何無效的瀏覽器都不能句柄已經阻止了文件的正確解釋。試圖追溯性地使HTML有效就太遲了;它已被閱讀。

換一種說法:你img標籤仍然無效,你正在做的是固定導致img元素創建的瀏覽器。

只有這樣,才能使那些img標籤是有效的alt添加到他們在HTML文件本身,與(作爲somethinghere points out)有用的內容,而不是簡單的把源文件名。

+2

此外,'alt'標籤 - 在使用時 - 實際上應該包含比文件名更多的信息,因爲無論如何,這已經在'src'屬性中提供了。 – somethinghere

+0

@somethinghere:絕對。 –

+0

換句話說:驗證器看到的文檔就是您在舊式View Source函數中看到的內容,而不是檢查器中的DOM樹視圖。驗證器沒有JavaScript解釋器,因此不會評估出現在文檔中的任何腳本。無論服務器發送的標記是驗證者得到的。 – BoltClock

0

您正在編輯dom,Validator不會檢查DOM,而只檢查HTML。您需要爲每張圖片添加一個alt屬性。

1

這裏的W3C HTML Checker(驗證器)的維護人員。其實你可以用下面的書籤特定的Web文檔上運行DOM的HTML檢查:

javascript:(function()%7Bfunction%20c(a,b)%7Bvar%20c=document.createElement(%22textarea%22);c.name=a;c.value=b;d.appendChild(c)%7Dvar%20e=function(a)%7Bfor(var%20b=%22%22,a=a.firstChild;a;)%7Bswitch(a.nodeType)%7Bcase%20Node.ELEMENT_NODE:b+=a.outerHTML;break;case%20Node.TEXT_NODE:b+=a.nodeValue;break;case%20Node.CDATA_SECTION_NODE:b+=%22%3C![CDATA[%22+a.nodeValue+%22]]%5C%3E%22;break;case%20Node.COMMENT_NODE:b+=%22%3C%5C!--%22+a.nodeValue+%22--%5C%3E%22;break;case%20Node.DOCUMENT_TYPE_NODE:b+=%22%3C!DOCTYPE%20%22+a.name+%22%3E%5Cn%22%7Da=a.nextSibling%7Dreturn%20b%7D(document),d=document.createElement(%22form%22);d.method=%22POST%22;d.action=%22http://validator.w3.org/nu/%22;d.enctype=%22multipart/form-data%22;d.target=%22_blank%22;d.acceptCharset=%22utf-8%22;c(%22showsource%22,%22yes%22);c(%22content%22,e);document.body.appendChild(d);d.submit()%7D)(); 

只需選擇代碼塊,並拖拽到瀏覽器的書籤欄。

它系列化當前頁面的DOM並把它用於檢查https://validator.w3.org/nu/