jQuery 3.3

jQuery.htmlPrefilter()




jquery

jQuery.html تصفية البريد (html) إرجاع: String

الوصف ؛: تعديل وتصفية سلاسل HTML مرت عبر أساليب التلاعب jQuery .

هذه الطريقة نادرا ما تحتاج إلى أن تسمى مباشرة. بدلاً من ذلك ، استخدمه كنقطة إدخال لتعديل أساليب معالجة jQuery الحالية. على سبيل المثال ، لإزالة كل علامات <del> من سلاسل HTML الواردة ، قم بما يلي:

var htmlPrefilter = $.htmlPrefilter,
  rdel = /<(del)(?=[\s>])[\w\W]*?<\/\1\s*>/gi;
 
$.htmlPrefilter = function( html ) {
  return htmlPrefilter.call( this, html ).replace( rdel, "" );
};

يمكن أيضًا استبدال هذه الوظيفة لتجاوز بعض مشكلات حالة الحواف. htmlPrefilter وظيفة htmlPrefilter الافتراضية في jQuery أن جميع العلامات متوافقة مع XHTML. يتضمن هذا أي شيء يشبه علامة HTML ، ولكنه في الواقع داخل سلسلة (على سبيل المثال

<a title="<div />"><>
). يمكن استخدام وظيفة jQuery.htmlPrefilter() لتجاوز هذا:
$.htmlPrefilter = function( html ) {
  // Return HTML strings unchanged
  return html;
};

ومع ذلك ، في حين أن الإصلاح أعلاه قصير وبسيط ، فإنه يضع العبء عليك لضمان وجود علامات متوافقة مع XHTML في أي سلاسل HTML. هناك حل أكثر شمولًا لهذه المشكلة هو:

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