forked from jquery/api.jquery.com
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes jquerygh-727 Close jquerygh-858
- Loading branch information
Showing
1 changed file
with
77 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
<?xml version="1.0"?> | ||
<entry type="method" name="jQuery.htmlPrefilter" return="String"> | ||
<title>jQuery.htmlPrefilter()</title> | ||
<desc>Modify and filter HTML strings passed through <a href="/category/manipulation/">jQuery manipulation methods</a>.</desc> | ||
<signature> | ||
<added>1.12/2.2</added> | ||
<argument name="html" type="String"> | ||
<desc>The HTML string on which to operate.</desc> | ||
</argument> | ||
</signature> | ||
<longdesc> | ||
<p>This method rarely needs to be called directly. Instead, use it as an entry point to modify existing <a href="/category/manipulation/">jQuery manipulation methods</a>. For instance, to remove all <code><del></code> tags from incoming HTML strings, do this:</p> | ||
<pre><code> | ||
var htmlPrefilter = $.htmlPrefilter, | ||
rdel = /<(del)(?=[\s>])[\w\W]*?<\/\1\s*>/gi; | ||
|
||
$.htmlPrefilter = function( html ) { | ||
return htmlPrefilter.call( this, html ).replace( rdel, "" ); | ||
}; | ||
</code></pre> | ||
<p>This function can also be overwritten in order to bypass certain edge case issues. The default <code>htmlPrefilter</code> function in jQuery will greedily ensure that all tags are XHTML-compliant. This includes anything that looks like an HTML tag, but is actually within a string (e.g. <pre><a title="<div />"><></pre>). The <code>jQuery.htmlPrefilter()</code> function can be used to bypass this:</p> | ||
<pre><code> | ||
$.htmlPrefilter = function( html ) { | ||
// Return HTML strings unchanged | ||
return html; | ||
}; | ||
</code></pre> | ||
<p>However, while the above fix is short and simple, it puts the burden on you to ensure XHTML-compliant tags in any HTML strings. A more thorough fix for this issue would be this:</p> | ||
<pre><code> | ||
var panything = "[\\w\\W]*?", | ||
|
||
// Whitespace | ||
// https://html.spec.whatwg.org/multipage/infrastructure.html#space-character | ||
pspace = "[\\x20\\t\\r\\n\\f]", | ||
|
||
// End of tag name (whitespace or greater-than) | ||
pnameEnd = pspace.replace( "]", ">]" ), | ||
|
||
// Tag name (a leading letter, then almost anything) | ||
// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state | ||
// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state | ||
pname = "[a-z]" + pnameEnd.replace( "[", "[^/\\0" ) + "*", | ||
|
||
// Void element (end tag prohibited) | ||
// https://html.spec.whatwg.org/multipage/syntax.html#void-elements | ||
pvoidName = "(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|" + | ||
"source|track|wbr)(?=" + pnameEnd + ")", | ||
|
||
// Attributes (double-quoted value, single-quoted value, unquoted value, or no value) | ||
// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 | ||
pattrs = "(?:" + pspace + "+[^\\0-\\x20\\x7f-\\x9f=\"'/>]+(?:" + pspace + "*=" + pspace + | ||
"*(?:\"" + panything + "\"|'" + panything + "'|" + | ||
pnameEnd.replace( "[", "[^" ) + "*(?!/)" + | ||
")|))*" + pspace + "*", | ||
|
||
// Trailing content of a close tag | ||
pcloseTail = "(?:" + pspace + panything + "|)", | ||
|
||
rspecialHtml = new RegExp( | ||
// Non-void element that self-closes: $1–$5 | ||
"(<)(?!" + pvoidName + ")(" + pname + ")(" + pattrs + ")(\\/)(>)|" + | ||
// No-innerHTML container (element, comment, or CDATA): $6 | ||
"(<(script|style|textarea)" + pattrs + ">" + panything + "<\\/\\7" + pcloseTail + ">|" + | ||
"<!--" + panything + "--)", | ||
"gi" | ||
), | ||
|
||
// "<"; element name; attributes; ">"; "<"; "/"; element name; ">"; no-innerHTML container | ||
pspecialReplacement = "$1$2$3$5$1$4$2$5$6"; | ||
|
||
$.htmlPrefilter = function( html ) { | ||
return ( html + "" ).replace( rspecialHtml, pspecialReplacement ); | ||
}; | ||
</code></pre> | ||
</longdesc> | ||
<category slug="manipulation"/> | ||
</entry> |