Side navigation
#3295 closed bug (invalid)
Opened August 26, 2008 09:05PM UTC
Closed June 20, 2010 07:17PM UTC
jQuery 1.2.X's .clean() mangles namespaced elements
| Reported by: | antonio.collins | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | 1.3 |
| Component: | core | Version: | 1.2.6 |
| Keywords: | Cc: | antonio.collins, flesler | |
| Blocked by: | Blocking: |
Description
The .clean() method tries to replace empty elements defined as <elem /> with <elem></elem>. Here's the code from .clean():
// Convert html string into DOM nodes
if ( typeof elem == "string" ) {
// Fix "XHTML"-style tags in all browsers
elem = elem.replace(/(<(\\w+)[^>]*?)\\/>/g, function(all, front, tag){
return
tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
all :
front + "></" + tag + ">";
});
If the element is namespaced like this:
<data:person name="john doe" id="123" />
the manufactured closing tag is incorrect and will cause some DOM injection methods to fail:
<data:person name="john doe" id="123" ></data>
Changing the regular expression's (\\w+) to ([A-Za-z0-9_:]+) fixes the problem.
Attachments (1)
Change History (3)
Changed August 26, 2008 09:27PM UTC by comment:1
| cc: | → antonio.collins, flesler |
|---|---|
| need: | Review → Test Case |
Changed December 16, 2008 06:21PM UTC by comment:2
I see the problem in IE7. FF3, Chrome 1.0, Safari 3.2.1, and Opera 9.63 work properly. The closing tag coming out of the code quoted above is incorrect, so I think the HTML parser must be fixing it for all but IE.
Test case attached.
Changed June 20, 2010 07:17PM UTC by comment:3
| resolution: | → invalid |
|---|---|
| status: | new → closed |
Hey, waitaminit. This is XML and not HTML. jQuery doesn't parse XML.
All 3 cases work well for me on FF2, the element is created successfully:
$('<data:person name="john doe" id="123" />') $('<data:person name="john doe" id="123">') $('<data:person name="john doe" id="123"></data:person>')Could you provide a test case ? a minimalistic html file with the requires html and js to reproduce the problem. Specifying failing browser/OS as well.