Navigation Menu

Skip to content

Commit

Permalink
Fix #11809: Update text without creating DOM nodes. Close gh-1412.
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisAntaki authored and gibson042 committed Nov 5, 2013
1 parent 19c1b61 commit fb2e0a0
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
6 changes: 5 additions & 1 deletion src/manipulation.js
Expand Up @@ -314,7 +314,11 @@ jQuery.fn.extend({
return access( this, function( value ) {
return value === undefined ?
jQuery.text( this ) :
this.empty().append( ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) );
this.empty().each(function() {
if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
this.textContent = value;
}
});
}, null, value, arguments.length );
},

Expand Down
22 changes: 20 additions & 2 deletions test/unit/manipulation.js
Expand Up @@ -64,9 +64,9 @@ test( "text(undefined)", function() {

function testText( valueObj ) {

expect( 4 );
expect( 7 );

var val, j;
var val, j, expected, $multipleElements, $parentDiv, $childDiv;

val = valueObj("<div><b>Hello</b> cruel world!</div>");
equal( jQuery("#foo").text(val)[ 0 ].innerHTML.replace(/>/g, "&gt;"), "&lt;div&gt;&lt;b&gt;Hello&lt;/b&gt; cruel world!&lt;/div&gt;", "Check escaped text" );
Expand All @@ -79,6 +79,24 @@ function testText( valueObj ) {

// Blackberry 4.6 doesn't maintain comments in the DOM
equal( jQuery("#nonnodes")[ 0 ].childNodes.length < 3 ? 8 : j[ 2 ].nodeType, 8, "Check node,textnode,comment with text()" );

// Update multiple elements #11809
expected = "New";

$multipleElements = jQuery( "<div>Hello</div>" ).add( "<div>World</div>" );
$multipleElements.text( expected );

equal( $multipleElements.eq(0).text(), expected, "text() updates multiple elements (#11809)" );
equal( $multipleElements.eq(1).text(), expected, "text() updates multiple elements (#11809)" );

// Prevent memory leaks #11809
$childDiv = jQuery( "<div/>" );
$childDiv.data("leak", true);
$parentDiv = jQuery( "<div/>" );
$parentDiv.append( $childDiv );
$parentDiv.text("Dry off");

equal( $childDiv.data("leak"), undefined, "Check for leaks (#11809)" );
}

test( "text(String)", function() {
Expand Down

0 comments on commit fb2e0a0

Please sign in to comment.