Ticket #3680 (closed bug: fixed)
Leading/trailing space not treated consistently in className
| Reported by: | rmurphey | Owned by: | |
|---|---|---|---|
| Priority: | minor | Milestone: | 1.4 |
| Component: | core | Version: | 1.3.2 |
| Keywords: | Cc: | rebecca@… | |
| Blocking: | Blocked by: |
Description
[this probably needs a better description]
I've set up a demo page that shows this bug in detail at:
http://www.rebeccamurphey.com/stuff/classbug/
I am populating a page with HTML contained in a JSON object sent by the server. Once the page is populated, I attempt to run the following jQuery:
$('li.toggle').size()
There are 54 li's that should match; Firefox 3 finds them, but other major browsers do not. I suspect the issue occurs when a class attribute contains some escape characters in the JSON, e.g.:
<li class=\"toggle\r\n\t\t\t\t\t\t\t\t\t\t\">
The following will result in alerts as appropriate, at least in Safari:
$('li).each(function() {
if (this.className.match('toggle')) { alert('match'); }
});
But this will not:
$('li').each(function() {
if (this.className == 'toggle') { alert('match'); }
});
Attachments
Change History
comment:1 Changed 4 years ago by flesler
- need changed from Review to Test Case
- Component changed from selector to core
comment:2 Changed 4 years ago by rmurphey
I've updated the test case at
http://www.rebeccamurphey.com/stuff/classbug/
it wasn't using AJAX before, it was just populating the div with the json when the a#load was clicked.
comment:3 Changed 4 years ago by rmurphey
Per the test case page I posted, this is a problem in:
- Safari 3.2
- IE6
- IE7
comment:4 Changed 4 years ago by dmethvin
With a newline in the string, you are creating HTML like: {{{<li class=\"toggle
">}}}
}}}
http://www.w3.org/TR/html401/types.html#type-cdata
"User agents may ignore leading and trailing white space in CDATA attribute values (e.g., " myval " may be interpreted as "myval"). Authors should not declare attribute values with leading or trailing white space."
I've attached a test case that shows that even with bare HTML/DOM, Firefox trims the trailing newlines/spaces but IE does not. Both are valid. The test correctly shows that 2 elements are selected in both IE and Firefox.
Whatever the problem is here, it seems that it's very dubious to depend on the behavior of trailing whitespace in a class name.
comment:5 Changed 4 years ago by dmethvin
- Summary changed from Elements that match selector are found in some browsers, not found in others to Leading/trailing space not treated consistently in className
Changed 4 years ago by batiste
-
attachment
test_class_selector.html
added
A test that try to reproduce the bug 3680
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

That's odd, IE's regex engine does match \r, \n and \t when using /\s/.
Can you provide a test case ? an html file that reproduces the problem. Try not to use ajax, add the json within a js file and include it.