使用jQuery更改showcase图像源仅适用于Chrome
Change showcase image source with jQuery only works in Chrome
我犯了一个错误,在将我的网站上线之前,我只在Chrome中测试了它,现在我正在迅速尝试修补使用Firefox和IE的人报告的一些错误。
在这个有缺陷的网页上,到处都是block
类的图像,还有一个id为currentImg
的介绍性默认图像。当用户单击某个块时,currentImg
会将其src
属性更改为所选块的属性,从而显示所单击图片的较大版本。
$('.block').click(function(){
var id = this.id; //Gets clicked block id
var src = ($(this).css('background-image')); //Gets block image source
src = src.replace('url(','').replace(')',''); //Formats file path
//alert(src); //Source check (Always successful)
$('#currentImg').attr('src', src); //I think this is where the issue is
});
所展示的图像与默认图像相比从未改变。当我实现淡入淡出转换时,默认的淡入淡出并返回,而不是新图像。
JSFiddle:
http://jsfiddle.net/Noff/rqpu3d5b/6/embedded/result/
您的问题是,不同浏览器在返回background-image
属性的方式上存在一些不一致。以下都是有效的url
声明。
url(image.png)
url('image.png')
url("image.png")
然而,不同的浏览器返回属性的方式不同,而且它不一定与CSS中的编写方式相匹配。在您的案例中,Firefox似乎返回了带引号的url
函数,但Chrome不是。您的字符串替换以提取URL并不需要它们,因此它以URL周围的引号结束。
为了解决这个问题,您需要一个更健壮的字符串替换。正则表达式应该可以解决您的问题。
src = src.replace(/url'(["']?([^"']*)["']?')/, "$1");
此正则表达式将从url
声明中捕获图像URL,并处理'
或"
字符(如果存在(。
下面是正则表达式各部分的分解。
url''(//匹配url(["']?//匹配"或"(如果存在(。([^"']*(//匹配除"answers"之外的任何字符,并将它们保存在$1变量中。["']?//匹配"或"(如果存在(。'')//匹配(
最终解决方案。
$('.block').click(function(){
var id = this.id; //Gets clicked block id
var src = ($(this).css('background-image')); //Gets block image source
src = src.replace(/url'(["']?([^"']*)["']?')/, "$1"); //Formats file path
$('#currentImg').attr('src', src); //I think this is where the issue is
});
注意:
如果您在外部CSS的background-image
属性中使用相对URL,请记住内联样式将相对于HTML文档,而不是CSS文档。
相关文章:
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- Regex不适用于Firefox,但适用于Chrome
- 关闭当前选项卡并打开一个新的-仅适用于Chrome
- 向下滚动时隐藏菜单,向上滚动时显示,适用于Chrome,不适用于Safari(手机)
- Mozilla并没有完美地执行这段代码,尽管它适用于Chrome和IE
- Angularjs ng-options 问题仅适用于 Chrome 浏览器
- 支持 JavaScript 的检查例程适用于 Chrome/Opera/IE,但不适用于 Firefox/Safari
- javascript单选按钮验证,适用于chrome,不适用于IE
- getElementsByTagName未保存(仅适用于chrome)
- 在bookmarklet中使用@import和@font face(适用于Chrome,但不适用于Firefox)
- Ajax成功回调仅适用于Chrome
- ScrollTop适用于Chrome和Edge,但不适用于Firefox
- jQuery适用于Chrome、Firefox、IE,但不适用于iPhone
- minlength仅适用于Chrome
- 自动完成功能适用于Chrome,但不适用于IE
- Javascript仅适用于Chrome
- formatDate JavaScript 函数仅适用于 Chrome
- Javascript String to Date适用于Chrome,而不是FF或Safari
- 文件上传代码适用于Chrome和Mozilla,但不适用于IE 8,9
- 地理编码器仅适用于chrome,不适用于Firefox / IE / android