Implemented #756, making text(String) really useful
authorJörn Zaefferer <joern.zaefferer@gmail.com>
Sun, 7 Jan 2007 23:59:13 +0000 (23:59 +0000)
committerJörn Zaefferer <joern.zaefferer@gmail.com>
Sun, 7 Jan 2007 23:59:13 +0000 (23:59 +0000)
ChangeLog.txt
src/jquery/coreTest.js
src/jquery/jquery.js

index 0d3bfd5..c91bf66 100644 (file)
@@ -27,6 +27,7 @@ New and Noteworthy
  - Improved docs for append, prepend, before and after, merging the three pairs into one
  - Improved show/hide animations to show only hidden and hide only visible elements
  - Added attr(String,Function) to calculate the value and support for attr("key", "${formula}") syntax, a shortcut for the former
+ - text(String) now escapes HTML per default and optionally stris tags completely
 
 1.0.4
 -----
index 436dcc5..78d4a27 100644 (file)
@@ -435,3 +435,7 @@ test("removeAttr(String", function() {
        ok( $('#mark').removeAttr("class")[0].className == "", "remove class" );\r
 });\r
 \r
+test("text(String, Boolean)", function() {\r
+       ok( $("#foo").text("<div><b>Hello</b> cruel world!</div>")[0].innerHTML == "&lt;div&gt;&lt;b&gt;Hello&lt;/b&gt; cruel world!&lt;/div&gt;", "Check escaped text" );\r
+       ok( $("#foo").text("<div><b>Hello</b> cruel world!</div>", true)[0].innerHTML == "Hello cruel world!", "Check stripped text" );\r
+});
\ No newline at end of file
index e380441..78d1ab9 100644 (file)
@@ -526,10 +526,19 @@ jQuery.fn = jQuery.prototype = {
         */
 
        /**
-        * Set the text contents of all matched elements. This has the same
-        * effect as html().
+        * Set the text contents of all matched elements.
         *
-        * @example $("p").text("Some new text.");
+        * Similar to html(), but  escapes HTML (replace "<" and ">" with their
+        * HTML entities.
+        *
+        * If stripTags argument is set to true, HTML is stripped.
+        *
+        * @example $("p").text("<b>Some</b> new text.");
+        * @before <p>Test Paragraph.</p>
+        * @result <p>&lt;b&gt;Some&lt;/b&gt; new text.</p>
+        * @desc Sets the text of all paragraphs.
+        *
+        * @example $("p").text("<b>Some</b> new text.", true);
         * @before <p>Test Paragraph.</p>
         * @result <p>Some new text.</p>
         * @desc Sets the text of all paragraphs.
@@ -537,13 +546,12 @@ jQuery.fn = jQuery.prototype = {
         * @name text
         * @type String
         * @param String val The text value to set the contents of the element to.
+        * @param Boolean stripTags (optional) Wheather to strip or only escape tags
         * @cat DOM/Attributes
         */
-       text: function(e) {
-               // A surprisingly high number of people expect the
-               // .text() method to do this, so lets do it!
+       text: function(e, stripTags) {
                if ( typeof e == "string" )
-                       return this.html( e );
+                       return this.html( stripTags ? e.replace(/<\/?[^>]+>/gi, '') : e.replace(/</g, "&lt;").replace(/>/g, "&gt;") );
 
                e = e || this;
                var t = "";