diff --git a/Gruntfile.js b/Gruntfile.js
index fbf9b5671..ed2bd7753 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -209,7 +209,7 @@ module.exports = function( grunt ) {
{ pattern: "dist/*.map", included: false, served: true },
{ pattern: "external/qunit/qunit.css", included: false, served: true },
{
- pattern: "test/**/*.@(js|css|jpg|html|xml)",
+ pattern: "test/**/*.@(js|css|jpg|html|xml|svg)",
included: false,
served: true
}
diff --git a/src/traversing.js b/src/traversing.js
index 64c7252b9..426d5b6ea 100644
--- a/src/traversing.js
+++ b/src/traversing.js
@@ -145,18 +145,18 @@ jQuery.each( {
return siblings( elem.firstChild );
},
contents: function( elem ) {
- if ( nodeName( elem, "iframe" ) ) {
- return elem.contentDocument;
- }
+ if ( typeof elem.contentDocument !== "undefined" ) {
+ return elem.contentDocument;
+ }
- // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
- // Treat the template element as a regular one in browsers that
- // don't support it.
- if ( nodeName( elem, "template" ) ) {
- elem = elem.content || elem;
- }
+ // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+ // Treat the template element as a regular one in browsers that
+ // don't support it.
+ if ( nodeName( elem, "template" ) ) {
+ elem = elem.content || elem;
+ }
- return jQuery.merge( [], elem.childNodes );
+ return jQuery.merge( [], elem.childNodes );
}
}, function( name, fn ) {
jQuery.fn[ name ] = function( until, selector ) {
diff --git a/test/data/1x1.svg b/test/data/1x1.svg
new file mode 100644
index 000000000..70b3e7412
--- /dev/null
+++ b/test/data/1x1.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/test/data/frame.html b/test/data/frame.html
new file mode 100644
index 000000000..98107be1d
--- /dev/null
+++ b/test/data/frame.html
@@ -0,0 +1,9 @@
+
+
+ frame
+
+
+
diff --git a/test/unit/traversing.js b/test/unit/traversing.js
index dd0554137..9ba66959e 100644
--- a/test/unit/traversing.js
+++ b/test/unit/traversing.js
@@ -744,56 +744,86 @@ QUnit.test( "contents()", function( assert ) {
} );
QUnit.test( "contents() for ", function( assert ) {
- assert.expect( 4 );
+ assert.expect( 4 );
- jQuery( "#qunit-fixture" ).append(
- "" +
- " " +
- " Hello, Web Component!" +
- "
" +
- " " +
- " " +
- ""
- );
+ jQuery( "#qunit-fixture" ).append(
+ "" +
+ " " +
+ " Hello, Web Component!" +
+ "
" +
+ " " +
+ " " +
+ ""
+ );
- var contents = jQuery( "#template" ).contents();
- assert.equal( contents.length, 6, "Check template element contents" );
+ var contents = jQuery( "#template" ).contents();
+ assert.equal( contents.length, 6, "Check template element contents" );
- assert.equal( contents.find( "span" ).text(), "Hello, Web Component!", "Find span in template and check its text" );
+ assert.equal( contents.find( "span" ).text(), "Hello, Web Component!", "Find span in template and check its text" );
- jQuery( "" ).append(
- jQuery( jQuery.map( contents, function( node ) {
- return document.importNode( node, true );
- } ) )
- ).appendTo( "#qunit-fixture" );
+ jQuery( "" ).append(
+ jQuery( jQuery.map( contents, function( node ) {
+ return document.importNode( node, true );
+ } ) )
+ ).appendTo( "#qunit-fixture" );
- contents = jQuery( "#templateTest" ).contents();
- assert.equal( contents.length, 6, "Check cloned nodes of template element contents" );
+ contents = jQuery( "#templateTest" ).contents();
+ assert.equal( contents.length, 6, "Check cloned nodes of template element contents" );
- assert.equal( contents.filter( "div" ).length, 3, "Count cloned elements from template" );
+ assert.equal( contents.filter( "div" ).length, 3, "Count cloned elements from template" );
} );
-QUnit[ "content" in document.createElement( "template" ) ? "test" : "skip" ](
- "contents() for remains inert",
- function( assert ) {
- assert.expect( 2 );
+QUnit[ "content" in document.createElement( "template" ) ? "test" : "skip" ]( "contents() for remains inert", function( assert ) {
+ assert.expect( 2 );
- Globals.register( "testScript" );
- Globals.register( "testImgOnload" );
+ Globals.register( "testScript" );
+ Globals.register( "testImgOnload" );
- jQuery( "#qunit-fixture" ).append(
- "" +
- " " +
- " " +
- ""
- );
+ jQuery( "#qunit-fixture" ).append(
+ "" +
+ " " +
+ " " +
+ ""
+ );
- var content = jQuery( "#template" ).contents();
+ var content = jQuery( "#template" ).contents();
- assert.strictEqual( window.testScript, true, "script in template isn't executed" );
- assert.strictEqual( window.testImgOnload, true, "onload of image in template isn't executed" );
- }
-);
+ assert.strictEqual( window.testScript, true, "script in template isn't executed" );
+ assert.strictEqual( window.testImgOnload, true, "onload of image in template isn't executed" );
+} );
+
+QUnit.test( "contents() for ", function( assert ) {
+ assert.expect( 2 );
+
+ var svgObject = jQuery( "" );
+ var done = assert.async();
+
+ svgObject.on( "load", function() {
+ var contents = jQuery( "#svg-object" ).contents();
+ assert.equal( contents.length, 1, "Check object contents" );
+ assert.equal( contents.find( "svg" ).length, 1, "Find svg within object" );
+ done();
+ } );
+
+ jQuery( "#qunit-fixture" ).append( svgObject );
+} );
+
+QUnit.test( "contents() for ", function( assert ) {
+ assert.expect( 2 );
+
+ var iframe = jQuery( "" );
+ var done = assert.async();
+
+ iframe.on( "load", function() {
+ var container = jQuery( "#frame-contents" ).contents();
+ var contents = container.find( "#test-frame" ).contents();
+ assert.equal( contents.length, 1, "Check frame contents" );
+ assert.equal( contents.find( "body" ).length, 1, "Find body within frame" );
+ done();
+ } );
+
+ jQuery( "#qunit-fixture" ).append( iframe );
+} );
QUnit.test( "sort direction", function( assert ) {
assert.expect( 12 );