zakovyrya
4 Oct 2007, 5:49 PM
Due to limitations of Safari Javascript engine tree traversal algorithms (at least 'cascade' which is actually dfs implemented using functions recursion) fall short on complex data structures. I propose things like
cascade : function(fn, scope, args){
if(fn.call(scope || this, args || this) !== false){
var cs = this.childNodes;
for(var i = 0, len = cs.length; i < len; i++) {
cs[i].cascade(fn, scope, args);
}
}
},
replace with something like that
bfsTraverse: function(callback) {
var queue = [ this ];
while (queue.length != 0) {
var node = queue.shift();
callback(node);
queue.push.apply(queue, node.childNodes);
}
},
dfsTraverse: function(callback) {
var stack = [ this ];
while (stack.length != 0) {
var node = stack.shift();
callback(node);
stack.unshift.apply(stack, node.childNodes);
}
}
Sorry, I didn't implement full scope and arguments functionality
cascade : function(fn, scope, args){
if(fn.call(scope || this, args || this) !== false){
var cs = this.childNodes;
for(var i = 0, len = cs.length; i < len; i++) {
cs[i].cascade(fn, scope, args);
}
}
},
replace with something like that
bfsTraverse: function(callback) {
var queue = [ this ];
while (queue.length != 0) {
var node = queue.shift();
callback(node);
queue.push.apply(queue, node.childNodes);
}
},
dfsTraverse: function(callback) {
var stack = [ this ];
while (stack.length != 0) {
var node = stack.shift();
callback(node);
stack.unshift.apply(stack, node.childNodes);
}
}
Sorry, I didn't implement full scope and arguments functionality