如何获取缺少alt / title的图像行号?

时间:2013-01-28 02:06:18

标签: javascript html regex

我正在使用一个javascript函数,它使用正则表达式来获取没有alt / title属性的图像列表:

function AltTitle(aSourceHTML, aResultField) {
  try {
  regexp = /<img((?:(?!alt)[^<>])*)>/gim;
      var vArray = aSourceHTML.match(regexp);
      var vLinks = vArray.join("\n\n");
      aResultField.value = vLinks;
  } catch (err) {
      alert("No Images Found");
  }
}

有没有办法让行号和图像列表一起使用?

3 个答案:

答案 0 :(得分:1)

尝试使用DOM来获取图像。

var imgs = [].filter.call(document.images, function(img) {
  return !img.alt && !img.title;
});

这将抓取所有没有alttitle属性或为空的图像,但它不会告诉您图像所在的行。尝试使用http://validator.w3.org/找出它。

答案 1 :(得分:0)

我会说“The Pony He Comes”,但这似乎更多地处理纯文本而不是实际的HTML。

我这样做的方法是首先将整个事物拆分为换行符,然后循环遍历每一行并对其运行正则表达式。由于您正在遍历这些行,只需打印出当前的迭代器值,然后就可以获得行号。

答案 2 :(得分:0)

如果您已在变量中包含源代码,则可以通过换行符将其拆分,然后针对每一行运行正则表达式。

function AltTitle(aSourceHTML, aResultField) {
    aSourceHTML = aSourceHTML.split('\n');

    for (var i = 0; i < aSourceHTML.length; i++ {
        // run your regex against aSourceHTML[i]...
    }
}

如果您尝试为特定页面(例如您所在的页面)执行此操作,则可以对其执行ajax请求,然后通过换行符对其进行拆分并运行它。尝试在控制台中的Stack Overflow上运行以下代码。它将显示此页面的HTML,包含行号。

$.get(window.location, function(data){
    data = data.split('\n');

    for (var i = 0; i < data.length; i++) {
        console.log('line ' + i, data[i]);
    }
});

但除非您尝试在javascript中为此编写工具,否则您应该使用http://validator.w3.org/。它会找到任何没有alts / titles的图像。

编辑:写了一个关于如何在jsfiddle上运行的示例:http://jsfiddle.net/c8X4K/