Background Info
A bug exists currently in IE9 where it thinks that the NodeFilter property of the createTreeWalker method is a callback function instead of an object containing a callback function.
In a call like this:
document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT, filter, false);
filter is defined as “an object that contains a method acceptNode,” in Webkit and Gecko; however, in IE9, there’s no mention of acceptNode at all–it expects a “callback method,” without that object wrapping.
Actual Question
So, what’s the best way to work around this issue without doing explicit browser detection? In some instances I need filter to be a method, and in others I need it to be an object containing the method. Is there a clean way to accomplish this? All of these browsers claim to support DOM 2.0, so I can’t test on that…
Documents – Proof of Bug
Here’s a comparison of the documentation for each:
Well, I came up with one thing that works. Open to better alternatives:
This works as nice browsers will call
.acceptNodeon the filter object, where bad ones will try and execute it immediately.Alternatives?