Okay ... so here is the deal. Safari reports typeof on a nodeList as a
function. So I used that and fixed the issue. Here is the link to the
example/test: http://brandon.jquery.com/testing/clean_safari_node_lists/
The new clean method:
clean: function(a) {
var r = [];
for ( var i = 0; i < a.length; i++ ) {
var arg = a[i];
if ( arg.constructor == String ) { // Convert html string into DOM nodes
// Trim whitespace, otherwise indexOf won't work as expected
var s = jQuery.trim(arg), div =
document.createElement("div"), wrap = [0,"",""];
if ( !s.indexOf("<opt") ) // option or optgroup
wrap = [1, "<select>", "</select>"];
else if ( !s.indexOf("<thead") || !s.indexOf("<tbody") )
wrap = [1, "<table>", "</table>"];
else if ( !s.indexOf("<tr") )
wrap = [2, "<table>", "</table>"]; // tbody auto-inserted
else if ( !s.indexOf("<td") || !s.indexOf("<th") )
wrap = [3, "<table><tbody><tr>", "</tr></tbody></table>"];
// Go to html and back, then peel off extra wrappers
div.innerHTML = wrap[1] + s + wrap[2];
while ( wrap[0]-- ) div = div.firstChild;
arg = div.childNodes;
}
if ( arg.length != undefined && ( (jQuery.browser.safari &&
typeof arg == 'function') || !arg.nodeType ) ) // Handles Array,
jQuery, DOM NodeList collections
for ( var n = 0; n < arg.length; n++ )
r.push(arg[n]);
else
r.push( arg.nodeType ? arg :
document.createTextNode(arg.toString()) );
}
return r;
}
I'm going to go ahead and commit ... unless anyone has some improvements.
--
Brandon Aaron
On 11/2/06, Brandon Aaron <[EMAIL PROTECTED]> wrote:
> On 11/2/06, Dave Methvin <[EMAIL PROTECTED]> wrote:
> > Something just occurred to me, maybe Safari is upset trying to convert the
> > nodeType to a boolean with the "!" operator. It's saying the value is
> > undefined, and that is correct, so maybe we can check directly for
> > undefined. Perhaps you could try this instead?
> >
> > Change
> >
> > else if ( arg.length != undefined && !arg.nodeType ) // Handles Array,
> > jQuery, DOM NodeList collections
> >
> > to
> >
> > else if ( arg.length != undefined && arg.nodeType == undefined ) //
> > Handles Array, jQuery, DOM NodeList collections
>
> I'm going to try this out. I'll post up my findings/test pages/etc as
> soon as I have them.
>
> --
> Brandon Aaron
>
_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/