簡體   English   中英

javascript代碼的動態執行

[英]Dyanamic Execution of javascript code

我有以下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”參數。 可以幫忙嗎?

不要重復is_array檢查:

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

@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:s答案。

嘗試這個:

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

NULL並不存在,它為null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM