| <html> |
| <body> |
| <div id="test"><span id="span1">foo<span id="span2">bar</span></span><span id="span3">baz</span></div> |
| <div id="console"></div> |
| <script> |
| var s = window.getSelection(); |
| var testDiv = document.getElementById("test"); |
| var span1 = document.getElementById("span1"); |
| var span2 = document.getElementById("span2"); |
| var span3 = document.getElementById("span3"); |
| |
| function log(str) { |
| var li = document.createElement("li"); |
| li.appendChild(document.createTextNode(str)); |
| document.getElementById("console").appendChild(li); |
| } |
| |
| function shouldBe(expr, expected) { |
| var actual = eval(expr); |
| if (actual != expected) |
| log("Failure: " + expr + " should be " + expected + ", was " + actual + "."); |
| else |
| log("Success: " + expr + " is " + expected + "."); |
| } |
| |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| var r = document.createRange(); |
| |
| |
| // delete a collapsed selection |
| r.setStart(span2.firstChild, 1); |
| r.setEnd(span2.firstChild, 1); |
| s.addRange(r); |
| |
| s.deleteFromDocument() |
| shouldBe('span1.textContent', 'fooar'); |
| try { |
| s.deleteFromDocument() |
| shouldBe('span1.textContent', 'foar'); |
| } catch (ex) { |
| log(ex); |
| } |
| |
| |
| // try to delete a collapsed selection at the start |
| r.setStart(span1.firstChild, 0); |
| r.setEnd(span1.firstChild, 0); |
| s.removeAllRanges(); |
| s.addRange(r); |
| |
| try { |
| s.deleteFromDocument() |
| shouldBe('span1.textContent', 'foar'); |
| } catch (ex) { |
| log(ex); |
| } |
| |
| |
| // delete whole contents |
| r.setStart(span2.firstChild, 0); |
| r.setEnd(span2.firstChild, 2); |
| s.removeAllRanges(); |
| s.addRange(r); |
| |
| s.deleteFromDocument() |
| shouldBe('span1.firstChild.nextSibling.id', 'span2'); |
| shouldBe('span1.firstChild.nextSibling.firstChild.nodeValue', ''); |
| |
| |
| // partially delete two nodes |
| r.setStart(span1.firstChild, 1); |
| r.setEnd(span3.firstChild, 2); |
| s.removeAllRanges(); |
| s.addRange(r); |
| |
| s.deleteFromDocument() |
| shouldBe('test.textContent', 'fz'); |
| |
| </script> |
| </body> |
| </html> |