如何将函数作为参数传递给Javascript中的自定义函数

时间:2014-06-05 19:06:00

标签: javascript

不确定这是否可行,我的编辑突出显示似乎并不这么认为......我试图在内置函数上运行相同的代码,例如previousSibling,nextSibling(I' ve有其他情况循环不同的功能会有所帮助)。即使有内置函数,我也不知道可以为我删除节点之间的空格(如果有的话请告诉我),我想知道是否将函数作为参数然后调用它与另一个元素来获取值是可能的。可以在"输入"上调用previousSibling和nextSibling。那么为什么不能这样做呢?

spaces.js

window.addEventListener("load", function () {

function removeSpaces (element) {
  function movement (direction) {
    var loop = true;
    while (loop) {
      if (element.direction) {
        var temp = element.direction;
        if ((!temp.id) && (!temp.name) && (!temp.className) && (!temp.value) && (!temp.type) && (!temp.onclick) && (!temp.style)) {
          temp.parentNode.removeChild(temp);
        } else {
          element = temp;
        }
      } else {
        loop = false; // This should only execute if the loop has gotten to either end of the siblings.
      }   
    }
  }
  movement(previousSibling); //These two lines are the problem...
  movement(nextSibling);
}

var input = document.getElementById("input");
removeSpaces(input);

alert(input.nextSibling.id);

});

input.html

<html>
<head>
<script src="spaces.js"></script>
</head>
<body>
<div> Input: </div>
<div> <input id="previousNode"> <input id="input"> <input id="nextNode"> </div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

previousSiblingnextSibling不是函数。您将它们用作纯变量,但它们并不存在于您的函数范围内。

要传递功能,请使用

function removeSpaces (element) {
  function movement (direction) {
    var temp;
    while (temp = direction(element)) { // call a function
      …
    }
  }
  movement(function(el) { return el.previousSibling; }); // a function expression
  movement(function(el) { return el.nextSibling; });
}

但是,由于previousSiblingnextSibling是属性,因此您可以更轻松地传递属性名称,并使用bracket notation来访问它们:

function removeSpaces (element) {
  function movement (direction) {
    var temp;
    while (temp = element[direction]) { // access a dynamic property
      …
    }
  }
  movement("previousSibling"); // a string
  movement("nextSibling");
}

顺便说一句,你的while - 循环与那个布尔loop变量真的很可怕。使用while(true) { if(…) break; }temp作为条件本身(如上例所示)