只是给出一个想法,我在这里尝试做的是一个示例代码:
$(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。
如何以适当的方式编写代码?
非常感谢帮助我解决问题。
答案 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());
});
参考文献: