这是Crockford的JavaScript代码:Good Parts。
This is code from Crockford's JavaScript: The Good Parts.
var results = []; var walkDOM = function (node,func) { func(node); //What does this do? node = node.firstChild; while(node) { walkDOM(node,func); node = node.nextSibling; } };我了解代码,除了 func(node)。我想这一点是通过节点作为函数 func 中的一个参数,但浏览器如何理解? 节点和 func 可以是任何东西 - 所以当函数被调用时,它可以这样读取:
I understand the code except for func(node). I guess the point is to pass node as a parameter in function func, but how will the browser understand it this way? node and func could be anything--so when the function is called it could read like this:
walkDOM(document.body,function(att) { node.getAttribute(att); results.push(node); });当 func 被传递时, walkDOM 将处理函数(att){...}(document.body) - 这不会有任何意义。那么为什么Crockford选择包括func(节点)?
When func is passed, walkDOM will process function(att) {...}(document.body)--which wouldn't make any sense. So why has Crockford chosen to include func(node)?
推荐答案看起来像我这样的 func
例如,如果我想为整个树中的每个节点提醒标签名称:
For example, if I wanted to alert the tag name for every node in the entire tree:
walkDOM(document.body, function(node) { alert(node.tagName); });在您的示例函数中:
walkDOM(document.body,function(att) { node.getAttribute(att); results.push(node); });...您已命名为节点参数到 att ,但这并不奇怪地在一个属性的名称中。当 node.getAttribute(att)被运行时,我会期待一个变量节点被定义,因为节点被设置为 att ...在该函数的范围内没有节点。
... you have named the node parameter to att, but that doesn't magically make in a name of an attribute. I would expect a "variable 'node' is not defined" when node.getAttribute(att) is ran, because node is being set to att... there is no node in that function's scope.
更多推荐
递归下来的DOM树
发布评论