зеркало из https://github.com/mozilla/gecko-dev.git
162 строки
4.1 KiB
HTML
162 строки
4.1 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>DOM Traversal: NodeIterator: Mutations (3/x)</title>
|
|
<script type="text/javascript" src="/MochiKit/packed.js"></script>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
|
|
</head>
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none">
|
|
<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>
|
|
</div>
|
|
<pre id="test">
|
|
<script class="testbody" type="text/javascript">
|
|
function removeNode(n) {
|
|
n.parentNode.removeChild(n);
|
|
}
|
|
var initInner = $('content').innerHTML;
|
|
var content = $('content');
|
|
|
|
|
|
function resetContent() {
|
|
content.innerHTML = initInner;
|
|
var checkIt = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT,
|
|
testNodeFilter, false);
|
|
var node;
|
|
while ((node = checkIt.nextNode()) != null) {
|
|
if (node.id) {
|
|
window[node.id] = node;
|
|
}
|
|
}
|
|
}
|
|
|
|
function makeSpan(id) {
|
|
var e = document.createElement('span');
|
|
e.id = id;
|
|
return e;
|
|
}
|
|
|
|
function testNodeFilter(n) {
|
|
if (n.tagName == 'SPAN')
|
|
return NodeFilter.FILTER_ACCEPT;
|
|
return NodeFilter.FILTER_SKIP;
|
|
}
|
|
|
|
function checkseq(it, root, expect) {
|
|
var checkIt = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
|
|
testNodeFilter, false);
|
|
var printedPointer = (it.referenceNode == undefined);
|
|
var string = '';
|
|
var node;
|
|
while ((node = checkIt.nextNode()) != null) {
|
|
if (!printedPointer && it.referenceNode == node) {
|
|
printedPointer = true;
|
|
var s = '[' + node.id + '] ';
|
|
if (it.pointerBeforeReferenceNode)
|
|
string += "* " + s;
|
|
else
|
|
string += s + "* ";
|
|
} else {
|
|
string += node.id + " ";
|
|
}
|
|
}
|
|
is(string.slice(0, -1), expect, "sequence check");
|
|
}
|
|
|
|
resetContent();
|
|
var it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
|
|
testNodeFilter, false);
|
|
checkseq(it, root, "root B C D * [E] E1 E11");
|
|
|
|
removeNode(C);
|
|
checkseq(it, root, "root B D * [E] E1 E11");
|
|
|
|
it.nextNode();
|
|
removeNode(D);
|
|
checkseq(it, root, "root B [E] * E1 E11");
|
|
|
|
it.nextNode();
|
|
removeNode(B);
|
|
checkseq(it, root, "root E [E1] * E11");
|
|
|
|
it.nextNode();
|
|
checkseq(it, root, "root E E1 [E11] *");
|
|
|
|
it.nextNode();
|
|
checkseq(it, root, "root E E1 [E11] *");
|
|
|
|
it.previousNode();
|
|
it.previousNode();
|
|
it.previousNode();
|
|
it.previousNode();
|
|
it.previousNode();
|
|
checkseq(it, root, "root * [E] E1 E11");
|
|
|
|
resetContent();
|
|
it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
|
|
testNodeFilter, false);
|
|
checkseq(it, root, "root B C D * [E] E1 E11");
|
|
|
|
it.nextNode();
|
|
it.nextNode();
|
|
checkseq(it, root, "root B C D E [E1] * E11");
|
|
|
|
it.previousNode();
|
|
it.previousNode();
|
|
checkseq(it, root, "root B C D * [E] E1 E11");
|
|
|
|
removeNode(D);
|
|
removeNode(B);
|
|
checkseq(it, root, "root C * [E] E1 E11");
|
|
|
|
n = makeSpan('n');
|
|
root.insertBefore(n, E);
|
|
checkseq(it, root, "root C n * [E] E1 E11");
|
|
|
|
n2 = makeSpan('n2');
|
|
root.insertBefore(n2, C);
|
|
checkseq(it, root, "root n2 C n * [E] E1 E11");
|
|
|
|
resetContent();
|
|
it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
|
|
testNodeFilter, false);
|
|
checkseq(it, root, "root B C D * [E] E1 E11");
|
|
|
|
removeNode(root);
|
|
checkseq(it, root, "root B C D * [E] E1 E11");
|
|
|
|
removeNode(B);
|
|
checkseq(it, root, "root C D * [E] E1 E11");
|
|
|
|
removeNode(D);
|
|
checkseq(it, root, "root C * [E] E1 E11");
|
|
|
|
it.nextNode();
|
|
it.nextNode();
|
|
it.nextNode();
|
|
checkseq(it, root, "root C E E1 [E11] *");
|
|
|
|
removeNode(E1);
|
|
checkseq(it, root, "root C [E] *");
|
|
|
|
n = makeSpan('n');
|
|
root.insertBefore(n, E);
|
|
checkseq(it, root, "root C n [E] *");
|
|
|
|
n2 = makeSpan('n2');
|
|
E.appendChild(n2);
|
|
checkseq(it, root, "root C n [E] * n2");
|
|
|
|
it.nextNode();
|
|
checkseq(it, root, "root C n E [n2] *");
|
|
|
|
removeNode(E);
|
|
checkseq(it, root, "root C n");
|
|
|
|
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|