W3cubDocs

/jQuery

jQuery.htmlPrefilter()

jQuery.htmlPrefilter( html )Returns: String

Description: Modify and filter HTML strings passed through jQuery manipulation methods.

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 );
};

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/jQuery.htmlPrefilter