jQuery.htmlPrefilter( html )Returns: String
Description: Modify and filter HTML strings passed through jQuery manipulation methods.
-
version added: 1.12/2.2jQuery.htmlPrefilter( html )
- htmlType: StringThe HTML string on which to operate.
-
This method rarely needs to be called directly. Instead, use it as an entry point to modify existing jQuery manipulation methods. For instance, to remove all <del>
tags from incoming HTML strings, do this:
var htmlPrefilter = $.htmlPrefilter, rdel = /<(del)(?=[\s>])[\w\W]*?<\/\1\s*>/gi; $.htmlPrefilter = function( html ) { return htmlPrefilter.call( this, html ).replace( rdel, "" ); };
This function can also be overwritten in order to bypass certain edge case issues. The default htmlPrefilter
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.
<a title="<div />"><>). The
jQuery.htmlPrefilter()
function can be used to bypass this: $.htmlPrefilter = function( html ) { // Return HTML strings unchanged return html; };
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:
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 ); };