不知道这是否可能,我的编辑人员强调的似乎并不这么想...我正在尝试在诸如previousSibling,nextSibling之类的内置函数上运行相同的代码(我在其他情况下也会循环使用不同的函数会有所帮助)。即使有一个内置函数,我也不知道该函数可以为我删除节点之间的空间(请让我知道是否存在),我想知道是否将一个函数用作参数,然后用另一个元素调用它获得价值是可能的。可以在“输入”上调用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>
previousSibling
并且nextSibling
没有功能。您可以将它们用作普通变量,但是它们不存在于函数范围内。
要传递功能,请使用
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; });
}
但是,由于previousSibling
和nextSibling
是属性,因此在您的情况下,更容易传递属性名称,并使用方括号表示法访问它们:
function removeSpaces (element) {
function movement (direction) {
var temp;
while (temp = element[direction]) { // access a dynamic property
…
}
}
movement("previousSibling"); // a string
movement("nextSibling");
}
顺便说一句,while
带有该布尔loop
变量的-loops确实很吓人。要么使用while(true) { if(…) break; }
,要么就像temp
条件本身一样(如上述示例所示)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句