以下函数用于检查自定义日期窗口小部件(javascript)是否为空。问题是,这个小部件有许多变化,其中显示M / D / Y字段,或者它可以是M / D或M / Y.
当然,我可以对所有组合进行硬编码,就好像检查一样,但是有更好的方法可以说"有3个可能的节点,可能有值......如果存在3个节点中的x个AND他们都有价值观,空虚为假。"
checkIfEmpty: function () {
var empty = true;
var mNode = this.getNode('month');
var month = mNode ? mNode.value : null;
var dNode = this.getNode('day');
var day = dNode ? dNode.value : null;
var yNode = this.getNode('year');
var year = yNode ? yNode.value : null;
if (month && day && year) {
empty = false;
}
return empty;
}
答案 0 :(得分:1)
checkIfEmpty: function () {
var empty = true;
var dateParts = [];
var mNode = this.getNode('month');
if(mNode && mNode.value){
dateParts.push('month');
}
var dNode = this.getNode('day');
if(dNode && dNode.value){
dateParts.push('day');
}
var yNode = this.getNode('year');
if(yNode && yNode.value){
dateParts.push('year');
}
if (dateParts.length) {
empty = false;
}
return empty;
}
答案 1 :(得分:0)
您可以添加以查看节点是否不存在
if ( (!mNode || month) && (!dNode || day) && (!yNode || year) ) {
答案 2 :(得分:0)
如果所有有效节点都存在value
属性,则:
if(mNode && dNode && yNode){
empty = false;
}
否则:
if(mNode && mNode.value && dNode && dNode.value && yNode && yNode.value){
empty = false;
}
我不确定我是否跟随,但是如果你需要至少有一个是真的那么空是假的那么:
if(mNode || dNode || yNode) {
empty = false;
}
同样,如果value
属性不是所有节点的标准属性:
if((mNode && mNode.value) || (dNode && dNode.value) || (yNode && yNode.value)){
empty = false;
}
如果你这样想的话我觉得更清楚:
如果(node && node.value)
返回truthy值,则date属性存在,否则date属性不存在。
答案 3 :(得分:0)
checkIfEmpty: function () {
var empty = false;
var mNode = this.getNode('month');
if(mNode && !mNode.value) {
empty = true;
}
var dNode = this.getNode('day');
if(dNode && !dNode.value) {
empty = true;
}
var yNode = this.getNode('year');
if(yNode && !yNode.value) {
empty = true;
}
return empty;
}
试图解决我自己的问题 - 到目前为止,这是实现我想要做的事情的最有效方式。任何人,关于如何提高效率的建议?