我有一个页面,通过jQuery()动态生成图像幻灯片。图像由最终用户上传为WordPress帖子。他们中的大多数都是懒惰的,并没有包含任何ALT标签。
我针对w3c验证器运行了页面,并且自然地,它抱怨每个图像都需要一个ALT标记。
所以我写了一个小jQuery()来动态添加任何没有的ALT标签。
jQuery('img').each( function(i)
{
var v = jQuery(this).attr('alt');
if( typeof(v) == 'undefined' )
jQuery(this).attr('alt','generic alt tag');
} );
虽然它出现在源上,但验证器-still-抱怨图像没有ALT标签。 w3c验证器在加载后会以某种方式'看到'页面但是 - 在jQuery触发之前?或者我错过了其他完全明显的东西?
有没有办法让我的代码解密 - 在验证器之前?最后,它在现实世界中有什么不同吗? IOW:是否有其他服务(搜索引擎,屏幕阅读器)可能会因此技术失败?
答案 0 :(得分:5)
标记验证服务验证标记。
它不会生成DOM,执行JavaScript然后验证修改后的DOM。
您必须在服务器上运行JavaScript才能在验证器中查看效果。
还有其他服务(搜索引擎,屏幕阅读器)可能会因此技术而失败吗?
屏幕阅读器通常会处理生成的DOM,但我怀疑你会发现屏幕阅读器用户比例高于非屏幕阅读器用户会在浏览器中禁用JS。
搜索引擎通常不会执行JS。
答案 1 :(得分:2)
“虽然它出现在源头上”
不,它没有。您正在查看DOM的当前状态,如果您改为查看页面的实际来源,您将看到它没有添加属性。
“w3c验证器在加载之后会以某种方式'看到'页面,但是 -before- jQuery开火了?“
jQuery根本不会触发。验证器加载页面并检查HTML代码。没有Javascript被执行,甚至没有创建一个可以改变Jasvascript的DOM。
验证器看到页面就像搜索引擎机器人一样,它们只加载页面本身并检查它。它们不执行任何Javascript,因此对于SEO目的,使用Javascript添加alt
属性没有意义。
答案 2 :(得分:0)
对我来说听起来很合理;验证器读取并检查您的Html,而不是JS。假设验证器遵循标准和普通Html页面的一组规则,这是有道理的。从这个角度来看,JS是一个扩展。
另外,想象如果禁用JS的用户访问您的页面会发生什么 - 它将如何工作和外观?
如果你仍然想验证生成的Html,这是一个处理JS的浏览器,那么我想你可以创建一个虚假的页面副本,并修改它以使它具有相同的结果,只有普通的Html(即仅出于测试目的而删除对JS的整体依赖性)。
另一方面 - 这究竟是什么意思?我不确定验证页面只是为了验证它是否适用于任何目的。如果您可以在大多数主浏览器中验证页面看起来很好,并且它也适用于小屏幕,那么您已经完成了比简单的W3C验证更有意义的事情。