比较 IMG SRC + A 包装 URL 字符串,看看它们是否“相似”
compare img src + a wrap url strings to see if they are "similar"
如果您有以下代码:
<div class="container">
<a href="http://testing.test/photo.jpg">
<img src="http://testing.test/photo.jpg">
</a>
<a href="http://testing.test/photo.jpg">
<img src="http://testing.test/photo-450x450.jpg">
</a>
<a href="http://testing.test/photo.jpg">
<img src="http://testing.test/photo-150x150.jpg">
</a>
<a href="http://somethingdifferent.test">
<img src="http://testing.test/photo.jpg">
</a>
</div>
我正在尝试向 A 标签添加一个类,里面有图像。
所以我有
$(".container").find('a').has("img").each(function () {
$(this).addClass("testingClass");
});
但是,现在我想添加一个额外的检查。仅当图像 src + 包装它的 href 相同或"相似"时,我才想添加类(它们最后只有缩略图大小,即 -150x150)。
换句话说,在上面的 HTML 代码中,它会将类添加到 1,2,3 <a>
而不是 4。
如何在 Javascript/jQuery 中执行此操作?对于第一个标签,我可以简单地比较 src 值和 href 值,如果相同 = 那么 true/add 类。但是其他的并不完全相同,并且会被证明是错误的,有没有办法做到这一点?
谢谢大家的任何提示
我试图压缩它,但回想起来可能很难阅读,所以我将尝试在下面浏览它:
$(".container").find('a').has("img").each(function(){
var f1 = $(this).attr('href').split('/').slice(-1)[0].split('.'),
f2 = $(this).find('img:first').attr('src').split('/').slice(-1)[0],
re = new RegExp('^'+f1.slice(0,f1.length-1).join('.')
+'(?:-''d+?x''d+?)?''.'+f1.slice(-1)[0]+'$');
if(re.test(f2)) $(this).addClass("testingClass");
});
js小提琴
基本上,我正在抓取href
的最后一部分和src
值,将href
分成两部分(文件名和文件扩展名),并动态构建一个正则表达式以匹配确切的名称或文件名与后缀-'dx'd
其中'd
表示任何数字。
为了更好地可视化它,正则表达式(重要位)如下所示:
/^FILE_NAME(?:-'d+?x'd+?)?'.FILE_EXT$/
这样的东西可以在没有正则表达式的情况下工作:
$(".container a").has("img").each(function () {
var hURL = $(this).attr("href");
var iURL = $(this).children("img").attr("src");
var imgName = iURL.slice(iURL.lastIndexOf("/")+1,iURL.lastIndexOf("."));
var hrefPointer = hURL.slice(hURL.lastIndexOf("/")+1,hURL.lastIndexOf("."));
if(imgName.indexOf(hrefPointer) >= 0 && hrefPointer.length > 1) {
$(this).addClass("testingClass");
}
});
JSFiddle
注意:这是草率的,更好的主意是有一个明确定义的"相似性",您可以通过正则表达式搜索。定义一个模式,并匹配模式,这比巧合的字符串分析要好得多。
例如,它们是否应该仅在来自同一域时才匹配?相同的完整路径
http://test.test.test/photo.jpg ==
http://test.test.test/thumbnails/photo-150x150.jpg
?
扩展呢?是否
http://test.test.test/photo.jpg ==
http://test.test.test/photo-150x150.png
如果没有测试,很难定义函数。有关这方面的更多信息,请查看测试驱动开发的想法。
希望这对这个和未来的项目有所帮助。
您可以从 href 中删除扩展名并测试它是否是图像 url 的前缀(如果这满足您对"相似"的定义):
jQuery(".container a img").each(function () {
var href_url = jQuery(this).parent("a").attr("href");
var img_url = jQuery(this).attr("src");
if(img_url.indexOf(href_url.substring(0, href_url.lastIndexOf("."))) == 0) {
jQuery(this).parent("a").addClass("testingClass");
}
});
编辑:修复了原始代码以添加类a
标签,并将startsWith
替换为indexOf == 0
,因为javascript中没有startsWith
。jsFiddle中的工作示例。
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以禁用jquery中的单个单选按钮
- 是否可以从父类访问子类的属性
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 如何让程序检查所选单词中是否有按键
- JavaScript 和 C++ 是否太相似而无法同时学习?
- 比较 IMG SRC + A 包装 URL 字符串,看看它们是否“相似”
- 是否有可能分解这些包含相似代码的函数?