jquery-dev

[Prev] Thread [Next]  |  [Prev] Date [Next]

[jquery-dev] Re: IE issue with .append? John Resig Tue Jun 23 13:00:50 2009

Ok, done:
http://docs.jquery.com/Core/jQuery#htmlownerDocument

--John



On Tue, Jun 23, 2009 at 3:20 PM, Daniel
Friesen<[EMAIL PROTECTED]> wrote:
>
> Can we update the documentation to also note that unclosed tags aren't
> supported.
> Malformed html is obvious, but people don't always think of a single tag
> as malformed html.
>
> ~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://daniel.friesen.name]
>
> John Resig wrote:
>> To be clear: jQuery supports the pattern, it just requires the closing /.
>>
>> $("<td/>") // ok
>> $("<td>") // ambiguous, malformed, not ok
>>
>> $("<a href='http://google.com/'/>") // ok
>> $("<a href='http://google.com/'>") // ambiguous, malformed, not ok
>>
>> --John
>>
>>
>>
>> On Tue, Jun 23, 2009 at 10:37 AM, Daniel
>> Friesen<[EMAIL PROTECTED]> wrote:
>>
>>> http://www.google.com/codesearch?hl=en&lr=&q=\%24\([%27%22]%3C[^%3C%3E%25]%2B[^%2F]%3E[%27%22]\)+lang%3Ajs&sbtn=Search
>>>
>>> I would have thought there'd be more. Frankly it is a sane way to think,
>>> jquery is dom manipulation and $('<td>') looks a lot like tag creation
>>> rather than something than html being mixed into jQuery.
>>> I for one have been thinking of $('<...>') as tag creation rather than
>>> raw html, or thinking that jQuery did it's own quick parsing for ages.
>>> Now I'll have to go back through 6 months of code to track down all the
>>> code using that pattern.
>>>
>>> ~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://daniel.friesen.name]
>>>
>>> John Resig wrote:
>>>
>>>> I'm hesitant to support that since it tends to promote passing in
>>>> malformed (X)HTML. At least with <span attr='val'/> it's obvious that
>>>> it should be a standalone.
>>>>
>>>> --John
>>>>
>>>>
>>>>
>>>> On Tue, Jun 23, 2009 at 12:27 AM, Daniel
>>>> Friesen<[EMAIL PROTECTED]> wrote:
>>>>
>>>>
>>>>> Ok, I agree that $('<div><span></span>') is just plain malformed html
>>>>> and doesn't need support.
>>>>> But to be honest $('<span>') looks like we're saying to create a span
>>>>> node, and likewise $('<span attr=val>') like we're trying to create a
>>>>> span with a single attr.
>>>>> Originally when I found out about $('<span>') I wasn't thinking HTML, I
>>>>> originally thought "Oh yay, jQuery has a shortcut for
>>>>> document.createElement, and after when I saw that $('<span foo=bar />')
>>>>> was possible I didn't think HTML, I still thought, createElement + attr
>>>>> setting.
>>>>>
>>>>> Would a patch that just makes $('<span attr=val>') work properly across
>>>>> browsers be accepted?
>>>>>
>>>>> That should be something simple like checking if it starts with < and
>>>>> ends with >, contains no other <>'s and doesn't have a / before the >
>>>>> then insert a single / before the last > before continuing.
>>>>>
>>>>> ~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://daniel.friesen.name]
>>>>>
>>>>> John Resig wrote:
>>>>>
>>>>>
>>>>>> Unfortunately, there's not really a whole lot that we can do on our
>>>>>> end to fix a problem like that - short of including a full HTML
>>>>>> parser/DOM generator.
>>>>>>
>>>>>> Now, I've written one:
>>>>>> http://ejohn.org/blog/pure-javascript-html-parser/
>>>>>>
>>>>>> but it's probably just better to make sure that your injected HTML is
>>>>>> well-formed.
>>>>>>
>>>>>> --John
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Jun 22, 2009 at 6:45 PM, Daniel
>>>>>> Friesen<[EMAIL PROTECTED]> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> I ran into another IE issue with unclosed tag syntax inside node
>>>>>>> creation (I personally like to leave the / out unless necessary most of
>>>>>>> the time, especially since it flows fairly nice with .text(userVar)).
>>>>>>>
>>>>>>> http://jsbin.com/ejote
>>>>>>>
>>>>>>> <span></span>
>>>>>>> <span />
>>>>>>> <span/>
>>>>>>> <span>
>>>>>>> <span class=foo />
>>>>>>>
>>>>>>> All work in ie7, ie8, opera, firefox, and midori.
>>>>>>>
>>>>>>> However:
>>>>>>> <span class=foo>
>>>>>>> <span class="foo">
>>>>>>>
>>>>>>> Fail in ie7 and ie8 while they work in firefox, midori, and opera.
>>>>>>>
>>>>>>> Filed as: http://dev.jquery.com/ticket/4806
>>>>>>>
>>>>>>> ~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://daniel.friesen.name]
>>>>>>>
>>>>>>> John Resig wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> This is very helpful analysis. I've added it to my todo list. Could
>>>>>>>> you file a ticket with your test cases, as well? Thanks!
>>>>>>>> http://dev.jquery.com/newticket
>>>>>>>>
>>>>>>>> --John
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Jun 22, 2009 at 4:33 PM, Daniel
>>>>>>>> Friesen<[EMAIL PROTECTED]> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Ok, narrowed it down.
>>>>>>>>> Someone tells me that Konqueror isn't working for that page either so 
>>>>>>>>> it
>>>>>>>>> looks like IE8 and Konqueror may share this behavior.
>>>>>>>>>  From the looks of it $button.append( "[" ); is working.
>>>>>>>>>
>>>>>>>>> $('#bodyContent').append( "[" ); // works
>>>>>>>>> $('#bodyContent').append( "[", "]" ); // "Invalid argument" in IE8 
>>>>>>>>> console, works in FF Firebug console
>>>>>>>>> $('#bodyContent').append( "asdf", "asdf" ); // "Invalid argument" in 
>>>>>>>>> IE8 console, works in FF Firebug console
>>>>>>>>> $('#bodyContent').append( document.createTextNode("["), "]" ); // 
>>>>>>>>> works
>>>>>>>>> $('#bodyContent').append( "<span>foo</span>", "]" ); // in IE8 
>>>>>>>>> console only inserts the ']' the foo span is not inserted, works in 
>>>>>>>>> FF Firebug console
>>>>>>>>> $('#bodyContent').append( "<span>asdf</span>", "<span>qwerty</span>" 
>>>>>>>>> ); // in IE8 console only inserts the qwerty span the asdf span is 
>>>>>>>>> not inserted, works in FF Firebug console
>>>>>>>>>
>>>>>>>>> So this looks like an IE8 (maybe Konqueror) issue where when .domManip
>>>>>>>>> is used (by something like .append) with more than one argument with 
>>>>>>>>> the
>>>>>>>>> first being a string a "Invalid argument" error is thrown if the first
>>>>>>>>> argument is not a valid node string. If the first argument is a valid
>>>>>>>>> node string, instead the first argument is ignored and the rest are
>>>>>>>>> inserted.
>>>>>>>>>
>>>>>>>>> ~Daniel Friesen (Dantman, Nadir-Seen-Fire) 
>>>>>>>>> [http://daniel.friesen.name]
>>>>>>>>>
>>>>>>>>> John Resig wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> You say that you still have problems if you split apart the query.
>>>>>>>>>>
>>>>>>>>>> So in this case $button.append( "[" ) fails - correct?
>>>>>>>>>>
>>>>>>>>>> What happens if you do:
>>>>>>>>>>
>>>>>>>>>> $button.append( document.createTextNode("[") )
>>>>>>>>>>
>>>>>>>>>> --John
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mon, Jun 22, 2009 at 2:09 PM, Daniel
>>>>>>>>>> Friesen<[EMAIL PROTECTED]> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> I've been having trouble with a bit of jQuery that works in FF, 
>>>>>>>>>>> Opera,
>>>>>>>>>>> and Midori, but breaks in IE.
>>>>>>>>>>>
>>>>>>>>>>> See http://animanga.wikia.com/wiki/Sandbox?allinone=0
>>>>>>>>>>> The code: http://dev.wikia.com/wiki/ShowHide/code.js
>>>>>>>>>>> (it's on a wiki, so you can see the history of editing)
>>>>>>>>>>>
>>>>>>>>>>> Using IE8's debugger tools (yay, finally MS rips of Firebug to give 
>>>>>>>>>>> us a
>>>>>>>>>>> way to find out why IE is breaking /sarcasm) I've narrowed it down 
>>>>>>>>>>> to
>>>>>>>>>>> $button.append( '[', $buttonLink, ']' ); Where jQuery's .append 
>>>>>>>>>>> calls
>>>>>>>>>>> .clean which near the end calls fragment.appendChild( ret[i] ); 
>>>>>>>>>>> fragment
>>>>>>>>>>> is the document, and i is 0, ret is 3 items in length containing the
>>>>>>>>>>> text node, span, and other text node. jQuery tries to appendChild 
>>>>>>>>>>> to the
>>>>>>>>>>> document and IE decides it doesn't like it.
>>>>>>>>>>>
>>>>>>>>>>> Does this seem like a jQuery bug?
>>>>>>>>>>>
>>>>>>>>>>> Note: ya, I have tried splitting the append call into three separate
>>>>>>>>>>> ones, still causes the same issue on the first one.
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> ~Daniel Friesen (Dantman, Nadir-Seen-Fire) 
>>>>>>>>>>> [http://daniel.friesen.name]
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>
>> >
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to [EMAIL PROTECTED]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---