我需要找到一种更有效的方法来访问javascript对象,找到空值并用空字符串(或其他内容)替换它们。这就是我所拥有的,它的功能,但我需要一种更有效的方法,我只知道必须有一个使用$ .each,但我似乎无法弄明白。
这是有效的...我想用更优雅的东西替换所有if语句?
var oMilestone = {
sTitle: $(this).attr("ows_Title"),
sStatus: $(this).attr("ows_Status"),
sOwner: $(this).attr("ows_Assigned_x0020_Owner"),
sStart: SPConvertDate($(this).attr("ows_Start_x0020_Date")),
sDue: SPConvertDate($(this).attr("ows_Due_x0020_Date")),
sPercent: $(this).attr("ows_Percent_x0020_Complete"),
sComments: $(this).attr("ows_Update_x0020_Comments")
}
if (oMilestone.sOwner == null) {
oMilestone.sOwner = " "
}
if (oMilestone.sStart == null) {
oMilestone.sStart = " "
}
if (oMilestone.sDue == null) {
oMilestone.sDue = " "
}
if (oMilestone.sPercent == null) {
oMilestone.sPercent = " "
}
if (oMilestone.sComments == null) {
oMilestone.sComments = " "
}
任何帮助?
凯文
答案 0 :(得分:0)
使用for...in
迭代属性。见下文,
for (i in oMilestone) {
if (oMilestone.hasOwnProperty(i) && !oMilestone[i]) {
oMilestone[i] = " "; //covers undefined, null and ""
}
}
答案 1 :(得分:0)
我的回答不使用$.each
。
但你总是可以编写一个内联的小帮助函数,它可以访问$(this)。 保存自己的重复。
function attrOrDefault(attribute) {
return $(this).attr("ows_Title") || " ";
}
var oMilestone = {
sTitle: attrOrDefault("ows_Title"),
sStatus: attrOrDefault("ows_Status"),
sOwner: attrOrDefault("ows_Assigned_x0020_Owner"),
sStart: SPConvertDate($(this).attr("ows_Start_x0020_Date")),
sDue: SPConvertDate($(this).attr("ows_Due_x0020_Date")),
sPercent: attrOrDefault("ows_Percent_x0020_Complete"),
sComments: attrOrDefault("ows_Update_x0020_Comments")
}
或者如果你认为你会经常使用它,那么可以扩展jQuery以拥有这个功能?
$.fn.attrOrDefault = function(attribute) {
return this.attr("ows_Title") || " ";
}