在jQuery中,可以在字符串之间添加条件逻辑吗
In jQuery is it Possible to Add Conditional Logic in between Strings
我正在添加一些条件逻辑来检查数组中的元素,如果它们存在,则使用JS生成的标记来添加类。有没有办法在两个字符串(从JS输出为标记)之间添加条件逻辑,以减少一些冗余的条件逻辑?
for (var i=0; i<data.length; i++) {
var gallery = data[i];
if (typeof gallery.showcase !== "undefined") {
if (typeof gallery.video !== "undefined") {
$(
"<li class='video " + (typeof gallery.video !== "undefined" ? "test ") + gallery.showcase + "'>" +
"<a href='" + gallery.link + "'></a>" +
"</li>").appendTo("#gallery ul");
}
else {
$(
"<li class='image " + gallery.showcase + "'>" +
"<a href='" + gallery.link + "'>" +
"<img src=" + gallery.image + " alt='" + gallery.title + "'>" +
"</a>"
+ "</li>").appendTo("#gallery ul");
}
}
else {
if (typeof gallery.video !== "undefined") {
$(
"<li class='video'>" +
"<a href='" + gallery.link + "'></a>" +
"</li>").appendTo("#gallery ul");
}
else {
$(
"<li class='image'>" +
"<a href='" + gallery.link + "'>" +
"<img src=" + gallery.image + " alt='" + gallery.title + "'>" +
"</a>"
+ "</li>").appendTo("#gallery ul");
}
}
}
我所希望的是将类添加到JS生成的标记中,以更干净的方式进行条件检查。想法?
您有很多重复-您可以通过识别常见字符串或元素并在一定程度上重构代码来实现所需内容。
for (var i = 0; i < data.length; i++) {
var gallery = data[i];
var isImage = (typeof gallery.video === 'undefined');
var $li = $('<li>', {'class': isImage ? 'image' : 'video'});
if (typeof gallery.showcase !== 'undefined') {
$li.addClass(gallery.showcase);
}
var $a = $('<a>', {href: gallery.link});
if (isImage) {
$('<img>', {src: gallery.image, alt: gallery.title}).appendTo($a);
}
$li.appendTo('#gallery ul').append($a);
}
我不能100%确定这是正确的(因为说实话,原始代码有点难以解析),但它应该大致演示如何解决这个问题。
您应该使用诸如.attr和.prop之类的jquery方法来定义jquery对象的属性和属性,而不是字符串串联。
这不仅是最佳实践,而且可以消除多余的代码:(这只是一个例子,我意识到它与您的要求不匹配,这是由您来解决的:P)
var li = $('<li>');
if (typeof gallery.video !== "undefined") {
li.addClass('video');
} else {
li.addClass('image');
}
// etc etc etc
li.appendTo("#gallery ul");
还要注意的是,javascript没有块作用域,所以var gallery
在同一作用域中践踏了以前的声明。
这里有另一种构建标签的方法:
for (var i = 0; i < data.length; i++) {
var gallery = data[i];
var isShowCase = typeof gallery.showcase !== "undefined";
var isVideo = typeof gallery.video !== "undefined";
var $li = $('<li><a><img /></a></li>');
if (isShowCase) {
if (isVideo) {
$li.addClass('video ' + gallery.showcase + (isVideo ? ' test' : '')).find('a').attr('href', gallery.link);
}
else {
$li.addClass('image ' + gallery.showcase).find('a').attr('href', gallery.link).find('img').attr({ src: gallery.image, alt: gallery.title });
}
}
else {
....
}
$li.appendTo('#gallery ul');
}
相关文章:
- 在Jquery调用之间添加其他函数
- 在图例项目之间添加额外空间的高图表
- 如果两个波浪号字符之间的字符计数大于60,则在两个波浪字字符之间添加波浪号
- highcharts-在类别中的行之间添加单独的行
- 在jQuery中,可以在字符串之间添加条件逻辑吗
- 在javascript数组元素之间添加换行符
- 在按钮之间添加隐藏空间
- Ext JS Gannt 在任务之间添加链接
- 如何在离子标签之间添加常见内容
- 如何在两个图像之间添加空间
- 一种在指定时间后更改的背景图像之间添加更平滑过渡的简单方法
- 需要在两个背景之间添加淡入淡出效果
- Javascript匹配字符并在两者之间添加空格
- 如何在 nvd3 图例和图表之间添加间隙
- 如何在 {{#each}} 循环中的元素之间添加分隔符,最后一个元素之后除外
- Lightbox2:如何在“lb-prev”和“lb-next”分区之间添加“编辑”
- 在“for”循环迭代之间添加延迟
- 如何在 pre 标记之间添加文本
- 在x轴和带时间刻度的直线之间添加空格
- fullpage.js在节之间添加了2个自动滚动事件