#3144 closed bug (fixed)
Inconsistent cross-browser results from .text() method
Reported by: | dmethvin | Owned by: | dmethvin |
---|---|---|---|
Priority: | low | Milestone: | 1.7 |
Component: | selector | Version: | 1.4.4 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
The .text() method returns different whitespace on different browsers. In the case of IE6/7, it sometimes returns no whitespace at all between adjacent text nodes, even though the corresponding .innerText result has white space.
This behavior has been in the .text() method for quite a while, so I don't think a lot of people have found it a critical problem. I would say that IE's lack of whitespace between text nodes is a bug.
The other whitespace differences might deserve some thought as well; for example, should IE's CR-LF sequences be changed to LF for consistency with the other browsers? Regardless, there will still be whitespace differences across browsers that jQuery can't control. For example, IE sometimes removes the trailing newline from text.
http://groups.google.com/group/jquery-en/browse_frm/thread/6f03f58ac517aea9/5865c907af2d0324
http://www.nabble.com/.text()-method-quirks-p6933512s27240.html
Sorta-related: Bug #2425
Change History (13)
comment:1 Changed 14 years ago by
comment:2 Changed 13 years ago by
I have fixed this bug. Here is the patch:
jQuery.getText = function ( elems ) { var ret = "", elem; for ( var i = 0; elems[i]; i++ ) { elem = elems[i]; // Get the text from text nodes and CDATA nodes if ( elem.nodeType === 3 || elem.nodeType === 4 ) { ret += elem.nodeValue; // Use textContent || innerText for elements } else if ( elem.nodeType === 1 ) { if ( typeof(elem.textContent) === 'string' ) ret += elem.textContent; else if ( typeof(elem.innerText) === 'string' ) ret += elem.innerText; else ret += getText( elem.childNodes ); // Traverse everything else, except comment nodes } else if ( elem.nodeType !== 8 ) { ret += getText( elem.childNodes ); } } return ret; }
comment:3 Changed 13 years ago by
Milestone: | 1.3 → 1.4.3 |
---|
comment:4 Changed 13 years ago by
Owner: | set to dmethvin |
---|---|
Status: | new → pending |
Dave is this issue still outstanding?
comment:6 Changed 13 years ago by
Milestone: | 1.4.3 → 1.4.5 |
---|---|
Priority: | minor → low |
Status: | new → pending |
I think the dupe triggered a reopen on this one. Would still love someone to verify that this is an issue in the latest jQuery.
comment:7 Changed 13 years ago by
Keywords: | needsreview added |
---|---|
Status: | pending → open |
Version: | 1.2.6 → 1.4.4 |
comment:8 Changed 12 years ago by
I played with the test case a bit more, and included the getText from ioquatix:
http://jsfiddle.net/dmethvin/tptT3/
It does look like the new getText provides better results for IE.
comment:10 Changed 12 years ago by
Resolution: | → fixed |
---|---|
Status: | open → closed |
Update Sizzle. Fixes #3144, #6863.
Changeset: 22fcc7744daded0dc0783d85df3bd88c6dbc4544
comment:11 Changed 12 years ago by
Component: | core → selector |
---|---|
Keywords: | needsreview removed |
Milestone: | 1.next → 1.7 |
comment:12 Changed 12 years ago by
Looking into latest version: http://code.jquery.com/jquery-git.js
What if function argument is null or undefined ?
comment:13 Changed 12 years ago by
I suppose "safe and slower" approach does not work? Perhaps: http://jsbin.com/uqadup/43/
Closed duplicate #5429 with another example.