这个javascript使用append
输出一些对象属性d.addClass("has-caption")
.append(g('<span class="caption" />')
.html(b.caption + '<div class="cat">' + b.category + '</div>' + '<div class="client">' + b.client + '</div>'));
如果我的网站未定义b.category
和b.client
,则会显示为未定义。所以我尝试添加一个if语句来检查这些属性是否基本上是空的,或者在if语句中添加了一个值,检查b.category
是否未定义。
d.addClass("has-caption")
.append(g('<span class="caption" />')
.html(b.caption + '<div class="cat">'if (typeof b.category !=== "undefined") { +b.category+} '</div>' + '<div class="client">' + b.client + '</div>'));
我想也许if语句可以检查b.category
是否未定义以显示它,否则不输出该属性。
这显然不起作用,而且我的javascript知识不是很好,所以如何使用if语句检查属性是否未定义,如果是,则显示它们否则在仍然使用append时不输出它们和我的代码中的字符串相同?
答案 0 :(得分:2)
您可以使用三元运算符表达:
.html(b.caption + '<div class="cat">' + (typeof b.category !== "undefined" ? b.category : '') +
'</div>' + etc
或以更加奇特的方式使用布尔“或”:
.html(b.caption + '<div class="cat">' + (b.category || '') +
'</div>' + etc
(后者假设b.category
不能是0
)。
虽然我个人更愿意写(找到)专用的格式化功能:
.html("{caption} <div class='cat'>{category}</div> <div class='client'>{client}</div>".format(b))
format
最简单的实现可能是这样的:
String.prototype.format = function(props) {
return this.replace(/{(\w+)}/g, function(_, key) {
return key in props ? props[key] : "";
})
}
示例:
b = {
foo: 123
}
console.log("hi {foo} and {bar}!".format(b))
// hi 123 and !
答案 1 :(得分:2)
逐个构建你的字符串,然后附加它:
var str = b.caption;
if (typeof b.category != "undefined") {
str += '<div class="cat">' + b.category + '</div>';
}
str += '<div class="client">' + b.client + '</div>';
str += '</span>'; // note, it seems you missed that part.
d.addClass("has-caption")
.append(g('<span class="caption" />')
.html(str);
答案 2 :(得分:2)
如果你仍然显示<div class="client">
即使没有客户端也没问题,你可以使用||
运算符用空字符串替换“falsy”值,例如未定义的属性:
d.addClass("has-caption")
.append(g('<span class="caption" />')
.html(b.caption + '<div class="cat">' + (b.category||'') + '</div>' + '<div class="client">' + (b.client||'') + '</div>'))
要完成与示例中完全相同的操作,您可以使用?:
排除第二个div:
d.addClass("has-caption")
.append(g('<span class="caption" />')
.html(b.caption + '<div class="cat">' + (b.category||'') + '</div>' + (d.client ? '<div class="client">' + b.client + '</div>') : ''))
我会劝阻这么长的一线队员。如果您将HTML构建为变量,那么您的代码将更容易理解。
答案 3 :(得分:1)
在实际代码行之前执行:
b.category = typeof b.category !== "undefined" ? b.category : '';
d.addClass("has-caption")
.append(g('<span class="caption" />')
.html(b.caption + '<div class="cat">' +b.category+ '</div>' + '<div class="client">' + b.client + '</div>'));
如果您不想更改对象,请将其保存在var:
中var t = typeof b.category !== "undefined" ? b.category : '';
d.addClass("has-caption")
.append(g('<span class="caption" />')
.html(b.caption + '<div class="cat">' +t+ '</div>' + '<div class="client">' + b.client + '</div>'));