Copybara bot | be50d49 | 2023-11-30 00:16:42 +0100 | [diff] [blame] | 1 | define( [ |
| 2 | "../core", |
| 3 | "../var/document", |
| 4 | "./var/rsingleTag", |
| 5 | "../manipulation/buildFragment", |
| 6 | |
| 7 | // This is the only module that needs core/support |
| 8 | "./support" |
| 9 | ], function( jQuery, document, rsingleTag, buildFragment, support ) { |
| 10 | |
| 11 | "use strict"; |
| 12 | |
| 13 | // Argument "data" should be string of html |
| 14 | // context (optional): If specified, the fragment will be created in this context, |
| 15 | // defaults to document |
| 16 | // keepScripts (optional): If true, will include scripts passed in the html string |
| 17 | jQuery.parseHTML = function( data, context, keepScripts ) { |
| 18 | if ( typeof data !== "string" ) { |
| 19 | return []; |
| 20 | } |
| 21 | if ( typeof context === "boolean" ) { |
| 22 | keepScripts = context; |
| 23 | context = false; |
| 24 | } |
| 25 | |
| 26 | var base, parsed, scripts; |
| 27 | |
| 28 | if ( !context ) { |
| 29 | |
| 30 | // Stop scripts or inline event handlers from being executed immediately |
| 31 | // by using document.implementation |
| 32 | if ( support.createHTMLDocument ) { |
| 33 | context = document.implementation.createHTMLDocument( "" ); |
| 34 | |
| 35 | // Set the base href for the created document |
| 36 | // so any parsed elements with URLs |
| 37 | // are based on the document's URL (gh-2965) |
| 38 | base = context.createElement( "base" ); |
| 39 | base.href = document.location.href; |
| 40 | context.head.appendChild( base ); |
| 41 | } else { |
| 42 | context = document; |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | parsed = rsingleTag.exec( data ); |
| 47 | scripts = !keepScripts && []; |
| 48 | |
| 49 | // Single tag |
| 50 | if ( parsed ) { |
| 51 | return [ context.createElement( parsed[ 1 ] ) ]; |
| 52 | } |
| 53 | |
| 54 | parsed = buildFragment( [ data ], context, scripts ); |
| 55 | |
| 56 | if ( scripts && scripts.length ) { |
| 57 | jQuery( scripts ).remove(); |
| 58 | } |
| 59 | |
| 60 | return jQuery.merge( [], parsed.childNodes ); |
| 61 | }; |
| 62 | |
| 63 | return jQuery.parseHTML; |
| 64 | |
| 65 | } ); |