aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gruntfile.js2
-rw-r--r--src/traversing.js24
-rw-r--r--test/data/1x1.svg6
-rw-r--r--test/data/frame.html9
-rw-r--r--test/unit/traversing.js106
5 files changed, 96 insertions, 51 deletions
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;
- }
-
- // 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 );
+ 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;
+ }
+
+ 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 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg width="1px" height="1px"
+ xmlns="http://www.w3.org/2000/svg">
+</svg>
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 @@
+<html>
+ <head>
+ <title>frame</title>
+ </head>
+ <frameset cols="20%, 80%">
+ <frame id="test-frame" src="iframe.html">
+ <frame src="iframe.html">
+ </frameset>
+</html>
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 <template />", function( assert ) {
- assert.expect( 4 );
+ assert.expect( 4 );
- jQuery( "#qunit-fixture" ).append(
- "<template id='template'>" +
- " <div id='template-div0'>" +
- " <span>Hello, Web Component!</span>" +
- " </div>" +
- " <div id='template-div1'></div>" +
- " <div id='template-div2'></div>" +
- "</template>"
- );
+ jQuery( "#qunit-fixture" ).append(
+ "<template id='template'>" +
+ " <div id='template-div0'>" +
+ " <span>Hello, Web Component!</span>" +
+ " </div>" +
+ " <div id='template-div1'></div>" +
+ " <div id='template-div2'></div>" +
+ "</template>"
+ );
- 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( "<div id='templateTest' />" ).append(
- jQuery( jQuery.map( contents, function( node ) {
- return document.importNode( node, true );
- } ) )
- ).appendTo( "#qunit-fixture" );
+ jQuery( "<div id='templateTest' />" ).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 <template /> remains inert",
- function( assert ) {
- assert.expect( 2 );
+QUnit[ "content" in document.createElement( "template" ) ? "test" : "skip" ]( "contents() for <template /> remains inert", function( assert ) {
+ assert.expect( 2 );
- Globals.register( "testScript" );
- Globals.register( "testImgOnload" );
+ Globals.register( "testScript" );
+ Globals.register( "testImgOnload" );
- jQuery( "#qunit-fixture" ).append(
- "<template id='template'>" +
- " <script>testScript = 1;</script>" +
- " <img src='" + baseURL + "1x1.jpg' onload='testImgOnload = 1' >" +
- "</template>"
- );
+ jQuery( "#qunit-fixture" ).append(
+ "<template id='template'>" +
+ " <script>testScript = 1;</script>" +
+ " <img src='" + baseURL + "1x1.jpg' onload='testImgOnload = 1' >" +
+ "</template>"
+ );
- 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 <object />", function( assert ) {
+ assert.expect( 2 );
+
+ var svgObject = jQuery( "<object id='svg-object' data='" + baseURL + "1x1.svg'></object>" );
+ 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 <frame />", function( assert ) {
+ assert.expect( 2 );
+
+ var iframe = jQuery( "<iframe id='frame-contents' src='" + baseURL + "frame.html'></iframe>" );
+ 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 );