开发者

Dyanamic Execution of javascript code

I have the following 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;
                }
            }
        }
    }
}

Here every time I am chec开发者_如何学JAVAking whether ob is an array or not and executing code. I want to minimize this, like instead of:

if (is_array(ob)) { 
    for (var i = 0; i < ob.length; i++) 
        ob[i].parentNode.removeChild(ob[i]);
} else { 
    ob.parentNode.removeChild(ob); 
}

I want to use a function like, doEval(ob,code,return), in this case,

doEval(ob,"parentNode.removeChild("+ob+")",NULL);

"return" parameter will return if I specify any like innerHTML. Can any one help?


Don't repeat is_array check:

var djs=function(ob) {
  if (!is_array(ob)) ob = [ob];


@SHiNKiROU is right of course, but just to provide an example of how to solve your problem with higher-order functions:

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); });
},
...

But again, use @SHiNKiROU:s answer for this particular case.


Try this:

function doEval(a, b, c) {
    if(is_array(a)) {
        eval(b);
    } else {
        eval(c);
    }
}

NULL doesn't exist by the way, it is null.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜