javascript - 如何缩短jQuery中的多个if条件?
问题描述
我一直在将图像放入我的元素 img src
。我有 4 种文件类型要检查,.png, .jpg, .jpeg, .gif
. 我想要实现的是,每当服务器中的文件类型不可用时,去检查其他文件类型并替换<img src="">
.
例如,如果.png
文件在服务器中不可用,则检查是否.jpeg
可用,如果仍然不可用,请检查.jpg
等等。
如果.jpg
在服务器上不可用,则检查.jpeg
是否可用,如果不可用,请检查.png
等等。
if-else
我当前的代码仅包含 2 个条件,我正在考虑如果要放置其他文件类型,如何缩短我的代码。
$('img').one('error', function() {
if(this.src.includes(".png")){
this.src = this.src.replace(".png", ".jpeg")
}else if(this.src.includes(".jpg")){
this.src = this.src.replace(".jpg", ".png")
}
});
我可以使用 lodash,但我不想安装另一个第三方包。我仍在考虑一个 switch case 语句,但如果一个if-else
语句会做,宁愿用它。谢谢!
解决方案
一个对象可以用作一个替换的查找
var replacements = {
"png": "jpeg",
"jpg": "png"
};
var reImgs = new RegExp(`\\.(${Object.keys(replacements).join('|')})`);
function cleanUp(str) {
return str.replace(reImgs, function(_, match) {
var replacement = replacements[match] || match;
return `.${replacement}`;
});
}
console.log(cleanUp("/foo/bar.png"));
console.log(cleanUp("/foo/bar.jpg"));
console.log(cleanUp("/foo/bar.gif"));
$('img').one('error', function() {
var src = this.src;
const updated = cleanUp(src);
if (updated !== src) {
console.log("trying", updated);
this.src = updated;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<img src="foo.png" />
推荐阅读
- mysql - UnhandledPromiseRejectionWarning 与 nodejs 和 mysql 请让我知道是什么问题
- c++ - 如何更改代码以避免运行时错误(AddressSanitizer)?
- c# - 在没有 UAC 的情况下使用管理员权限从 C# 运行 PsExec
- sql - SQL-获取列中的字符长度问题,但无法使用变量重现
- arrays - 获取数据库中的单列数组并在 laravel Blade 中显示
- qemu - 如何将每个受支持的 CPU 标志作为 QEMU CPU 标志?
- vue.js - Vue.js 递归组件的数据,包括 props
- ruby-on-rails - Ruby on rails 6.1.2 从索引页面创建帖子
- python - Plotly Dash 按钮回调函数
- python - 合并两个 pandas 数据框,一个日期不频繁,应按最近日期合并