Node-childNodes.html (3635B)
1 <!DOCTYPE html> 2 <meta charset=utf-8> 3 <title>Node.childNodes</title> 4 <link rel=help href="https://dom.spec.whatwg.org/#dom-node-childnodes"> 5 <link rel=author title="Tim Taubert" href="mailto:ttaubert@mozilla.com"> 6 <link rel=author title="Ms2ger" href="mailto:Ms2ger@gmail.com"> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 <div id="log"></div> 10 <div style="display: none"> 11 <ul id='test'><li>1</li><li>2</li><li>3</li><li>4</li></ul> 12 </div> 13 <script> 14 test(function() { 15 var element = document.createElement("p"); 16 assert_equals(element.childNodes, element.childNodes); 17 }, "Caching of Node.childNodes"); 18 19 var check_parent_node = function(node) { 20 assert_array_equals(node.childNodes, []); 21 22 var children = node.childNodes; 23 var child = document.createElement("p"); 24 node.appendChild(child); 25 assert_equals(node.childNodes, children); 26 assert_array_equals(children, [child]); 27 assert_equals(children.item(0), child); 28 29 var child2 = document.createComment("comment"); 30 node.appendChild(child2); 31 assert_array_equals(children, [child, child2]); 32 assert_equals(children.item(0), child); 33 assert_equals(children.item(1), child2); 34 35 assert_false(2 in children); 36 assert_equals(children[2], undefined); 37 assert_equals(children.item(2), null); 38 }; 39 40 test(function() { 41 check_parent_node(document.createElement("p")); 42 }, "Node.childNodes on an Element."); 43 44 test(function() { 45 check_parent_node(document.createDocumentFragment()); 46 }, "Node.childNodes on a DocumentFragment."); 47 48 test(function() { 49 check_parent_node(new Document()); 50 }, "Node.childNodes on a Document."); 51 52 test(function() { 53 var node = document.createElement("div"); 54 var kid1 = document.createElement("p"); 55 var kid2 = document.createTextNode("hey"); 56 var kid3 = document.createElement("span"); 57 node.appendChild(kid1); 58 node.appendChild(kid2); 59 node.appendChild(kid3); 60 61 var list = node.childNodes; 62 assert_array_equals([...list], [kid1, kid2, kid3]); 63 64 var keys = list.keys(); 65 assert_false(keys instanceof Array); 66 keys = [...keys]; 67 assert_array_equals(keys, [0, 1, 2]); 68 69 var values = list.values(); 70 assert_false(values instanceof Array); 71 values = [...values]; 72 assert_array_equals(values, [kid1, kid2, kid3]); 73 74 var entries = list.entries(); 75 assert_false(entries instanceof Array); 76 entries = [...entries]; 77 assert_equals(entries.length, keys.length); 78 assert_equals(entries.length, values.length); 79 for (var i = 0; i < entries.length; ++i) { 80 assert_array_equals(entries[i], [keys[i], values[i]]); 81 } 82 83 var cur = 0; 84 var thisObj = {}; 85 list.forEach(function(value, key, listObj) { 86 assert_equals(listObj, list); 87 assert_equals(this, thisObj); 88 assert_equals(value, values[cur]); 89 assert_equals(key, keys[cur]); 90 cur++; 91 }, thisObj); 92 assert_equals(cur, entries.length); 93 94 assert_equals(list[Symbol.iterator], Array.prototype[Symbol.iterator]); 95 assert_equals(list.keys, Array.prototype.keys); 96 if (Array.prototype.values) { 97 assert_equals(list.values, Array.prototype.values); 98 } 99 assert_equals(list.entries, Array.prototype.entries); 100 assert_equals(list.forEach, Array.prototype.forEach); 101 }, "Iterator behavior of Node.childNodes"); 102 103 104 test(() => { 105 var node = document.getElementById("test"); 106 var children = node.childNodes; 107 assert_true(children instanceof NodeList); 108 var li = document.createElement("li"); 109 assert_equals(children.length, 4); 110 111 node.appendChild(li); 112 assert_equals(children.length, 5); 113 114 node.removeChild(li); 115 assert_equals(children.length, 4); 116 }, "Node.childNodes should be a live collection"); 117 </script>