2016-02-16 32 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/