动态执行javascript代码

时间:2011-02-27 19:45:20

标签: javascript

我有以下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”参数将返回。任何人都可以帮忙吗?

3 个答案:

答案 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