我有以下JavaScript:
var djs = function (ob) {
return {
remove: function () { //removes element
if (is_array(ob)) {
for (var i = 0; i < ob.length; i++)
ob[i].parentNode.removeChild(ob[i]);
} else {
ob.parentNode.removeChild(ob);
}
},
empty: function () { //makes element empty
if (is_array(ob)) {
for (var i = 0; i < ob.length; i++)
ob[i].innerHTML = "";
} else {
ob.innerHTML = ""
}
},
html: function (str) { //gets or sets innerHTML
if (str) {
if (is_array(ob)) {
for (var i = 0; i < ob.length; i++)
ob[i].innerHTML = str;
} else {
ob.innerHTML = str;
}
} else {
if (is_array(ob)) {
for (var i = 0; i < ob.length; i++)
rob += ob[i].innerHTML;
return rob;
} else {
return ob.innerHTML;
}
}
}
}
}
每次我检查ob
是否为数组并执行代码时。我想最小化这个,而不是:
if (is_array(ob)) {
for (var i = 0; i < ob.length; i++)
ob[i].parentNode.removeChild(ob[i]);
} else {
ob.parentNode.removeChild(ob);
}
我想使用像doEval(ob,code,return)
这样的函数,在这种情况下,
doEval(ob,"parentNode.removeChild("+ob+")",NULL);
如果我指定innerHTML
之类的任何内容,“return”参数将返回。任何人都可以帮忙吗?
答案 0 :(得分:4)
不要重复is_array
检查:
var djs=function(ob) {
if (!is_array(ob)) ob = [ob];
答案 1 :(得分:0)
@SHiNKiROU当然是对的,但只是提供一个如何用高阶函数解决问题的例子:
function doToAll(ob, callback) {
if(is_array(ob)) {
for (var i = 0; i < ob.length; i++) {
callback(ob[i]);
}
} else {
callback(ob);
}
}
...
remove:function(){ //removes element
doToAll(ob, function(actualOb) { actualOb.parentNode.removeChild(actualOb); });
},
...
但是,再次使用@SHiNKiROU:这个特例的答案。
答案 2 :(得分:-1)
试试这个:
function doEval(a, b, c) {
if(is_array(a)) {
eval(b);
} else {
eval(c);
}
}
顺便说一下, NULL
不存在,它是null
。