2011-02-27 21 views
1

的Dyanamic執行,我有以下的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任何

「迴歸」參數將返回。任何人都可以幫忙嗎?

+1

看起來你有一個PHP口音 – 2011-02-27 19:49:00

+0

我認爲你可以用[高階函數](http://spheredev.org/wiki/Higher-order_programming_in_JavaScript)來做到這一點,但Javascript也有一個[eval]( http://www.w3schools.com/jsref/jsref_eval.asp)函數。 – 2011-02-27 19:49:57

回答

-1

試試這個:

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

NULL不通過的方式存在,它是null

4

不要重複is_array檢查:

var djs=function(ob) { 
    if (!is_array(ob)) ob = [ob]; 
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:這個特殊情況的答案。