test_NodeIterator_mutations_3.html (4017B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>DOM Traversal: NodeIterator: Mutations (3/x)</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> 7 </head> 8 <p id="display"></p> 9 <div id="content" style="display: none"> 10 <span id=root><span id=B></span><span id=C></span><span id=D></span><span id=E><span id=E1><span id=E11></span></span></span></span> 11 </div> 12 <pre id="test"> 13 <script class="testbody" type="text/javascript"> 14 function removeNode(n) { 15 n.remove(); 16 } 17 var initInner = $('content').innerHTML; 18 var content = $('content'); 19 20 21 function resetContent() { 22 content.innerHTML = initInner; 23 var checkIt = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT, 24 testNodeFilter); 25 var node; 26 while ((node = checkIt.nextNode()) != null) { 27 if (node.id) { 28 window[node.id] = node; 29 } 30 } 31 } 32 33 function makeSpan(id) { 34 var e = document.createElement('span'); 35 e.id = id; 36 return e; 37 } 38 39 function testNodeFilter(n) { 40 if (n.tagName == 'SPAN') 41 return NodeFilter.FILTER_ACCEPT; 42 return NodeFilter.FILTER_SKIP; 43 } 44 45 function checkseq(it, root, expect) { 46 var checkIt = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 47 testNodeFilter); 48 var printedPointer = (it.referenceNode == undefined); 49 var string = ''; 50 var node; 51 while ((node = checkIt.nextNode()) != null) { 52 if (!printedPointer && it.referenceNode == node) { 53 printedPointer = true; 54 var s = '[' + node.id + '] '; 55 if (it.pointerBeforeReferenceNode) 56 string += "* " + s; 57 else 58 string += s + "* "; 59 } else { 60 string += node.id + " "; 61 } 62 } 63 is(string.slice(0, -1), expect, "sequence check"); 64 } 65 66 resetContent(); 67 var it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT, 68 testNodeFilter); 69 checkseq(it, root, "root B C D * [E] E1 E11"); 70 71 removeNode(C); 72 checkseq(it, root, "root B D * [E] E1 E11"); 73 74 it.nextNode(); 75 removeNode(D); 76 checkseq(it, root, "root B [E] * E1 E11"); 77 78 it.nextNode(); 79 removeNode(B); 80 checkseq(it, root, "root E [E1] * E11"); 81 82 it.nextNode(); 83 checkseq(it, root, "root E E1 [E11] *"); 84 85 it.nextNode(); 86 checkseq(it, root, "root E E1 [E11] *"); 87 88 it.previousNode(); 89 it.previousNode(); 90 it.previousNode(); 91 it.previousNode(); 92 it.previousNode(); 93 checkseq(it, root, "root * [E] E1 E11"); 94 95 resetContent(); 96 it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT, 97 testNodeFilter); 98 checkseq(it, root, "root B C D * [E] E1 E11"); 99 100 it.nextNode(); 101 it.nextNode(); 102 checkseq(it, root, "root B C D E [E1] * E11"); 103 104 it.previousNode(); 105 it.previousNode(); 106 checkseq(it, root, "root B C D * [E] E1 E11"); 107 108 removeNode(D); 109 removeNode(B); 110 checkseq(it, root, "root C * [E] E1 E11"); 111 112 n = makeSpan('n'); 113 root.insertBefore(n, E); 114 checkseq(it, root, "root C n * [E] E1 E11"); 115 116 n2 = makeSpan('n2'); 117 root.insertBefore(n2, C); 118 checkseq(it, root, "root n2 C n * [E] E1 E11"); 119 120 resetContent(); 121 it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT, 122 testNodeFilter); 123 checkseq(it, root, "root B C D * [E] E1 E11"); 124 125 removeNode(root); 126 checkseq(it, root, "root B C D * [E] E1 E11"); 127 128 removeNode(B); 129 checkseq(it, root, "root C D * [E] E1 E11"); 130 131 removeNode(D); 132 checkseq(it, root, "root C * [E] E1 E11"); 133 134 it.nextNode(); 135 it.nextNode(); 136 it.nextNode(); 137 checkseq(it, root, "root C E E1 [E11] *"); 138 139 removeNode(E1); 140 checkseq(it, root, "root C [E] *"); 141 142 n = makeSpan('n'); 143 root.insertBefore(n, E); 144 checkseq(it, root, "root C n [E] *"); 145 146 n2 = makeSpan('n2'); 147 E.appendChild(n2); 148 checkseq(it, root, "root C n [E] * n2"); 149 150 it.nextNode(); 151 checkseq(it, root, "root C n E [n2] *"); 152 153 removeNode(E); 154 checkseq(it, root, "root C n"); 155 156 157 </script> 158 </pre> 159 </body> 160 </html>