检查链接(不是URL)是否包含一些文本(.jpg,.gif,.png)

时间:2014-06-05 17:36:09

标签: javascript jquery

只是给出一个想法,我在这里尝试做的是一个示例代码:

$(function(){
  if ($('.maybe > div > a.link:contains(".JPG, .jpg, .gif, .GIF")').length) {
    alert('hello');
});

我想检查某些链接的内容是否包含点和所有图片扩展名的字母,例如

<div class="maybe">
 <div>
   <a class="link" href="someURL">thisIsAnImage.jpg</a>
   <a class="link" href="someURL">thisIs**NOT**AnImage.pdf</a>
 </div>
</div>
 <div class="maybe">
 <div>
   <a class="link" href="someURL">thisIs**NOT**AnImage.zip</a>
   <a class="link" href="someURL">thisIsAnotherImage.png</a>
 </div>
</div>

div和链接是由php动态生成的,因此一旦页面生成,就无法知道有多少链接和div。

如何以适当的方式编写代码?

非常感谢帮助我解决问题。

2 个答案:

答案 0 :(得分:7)

这是我的第一直觉:

$('.maybe .link').each(function () {
    if ($(this).text().toLowerCase().match(/\.(jpg|png|gif)/g)) {
        console.log("yay I did it");
    }
});

在链接文本上使用toLowerCase(),这样您就不必检查大小写。然后将String.match(regex)与regex组一起使用以匹配所有文件扩展名。

希望这有帮助!

编辑:这是jsfiddle的一个例子。打开javascript控制台以查看console.log语句的输出。 http://jsfiddle.net/9Q5yu/1/

答案 1 :(得分:3)

我建议:

// selects all the 'a' elements, filters that collection:
var imgLinks = $('a').filter(function(){
    // keeps *only* those element with an href that ends in one of the
    // file-types (this is naive, however, see notes):
    return ['png','gif','jpg'].indexOf(this.href.split('.').pop()) > -1;
});
// I have no idea what you were doing, trying to do, wanting to do or why,
// but please don't use 'alert()', it's a horrible UI:
if (imgLinks.length) {
    console.log('hello');
}

以上是一个相对简单,天真的检查;因为它只是在.字符上拆分href,然后测试数组中的最后一个元素(由split()返回)等于数组的一个元素。对于具有查询字符串的任何图像,例如http://example.com/image2.png?postValue=1234

,这将失败

鉴于评论中的澄清,我将上述内容修改为:

var fileTypes = ['png','gif','jpg','gif'],
    imgLinks = $('a').filter(function(){

    return (new RegExp(fileTypes.join('|') + '$', 'gi')).test($(this).text());
});

参考文献: