diff --git a/packages/ui/domrange.js b/packages/ui/domrange.js index b957a93e43..e9526f37a8 100644 --- a/packages/ui/domrange.js +++ b/packages/ui/domrange.js @@ -214,7 +214,6 @@ _extend(DomRange.prototype, { throw new Error("Member already exists: " + id.slice(1)); } } - members[id] = newMember; if ('dom' in newMember) { if (! newMember.dom) @@ -225,8 +224,11 @@ _extend(DomRange.prototype, { var nodes = range.getNodes(); if (tbodyFixNeeded(nodes, parentNode)) + // may cause a refresh(); important that the + // member isn't added yet parentNode = moveWithOwnersIntoTbody(this); + members[id] = newMember; for (var i = 0; i < nodes.length; i++) insertNode(nodes[i], parentNode, nextNode); } else { @@ -240,8 +242,11 @@ _extend(DomRange.prototype, { node.$ui = this.component; if (tbodyFixNeeded(node, parentNode)) + // may cause a refresh(); important that the + // member isn't added yet parentNode = moveWithOwnersIntoTbody(this); + members[id] = newMember; insertNode(node, parentNode, nextNode); } }, @@ -693,8 +698,6 @@ DomRange.prototype.contains = function (compOrNode) { return false; var range; - if (! compOrNode) - debugger; if ('dom' in compOrNode) { // Component range = compOrNode.dom; diff --git a/packages/ui/domrange_tests.js b/packages/ui/domrange_tests.js index 69b3869118..1758cde8f8 100644 --- a/packages/ui/domrange_tests.js +++ b/packages/ui/domrange_tests.js @@ -846,6 +846,35 @@ Tinytest.addAsync("ui - DomRange - IE TextNode GC", function (test, onComplete) }, 500); }); +Tinytest.add("ui - DomRange - more TBODY", function (test) { + inDocument(htmlRange("
"), function (r) { + var table = r.elements()[0]; + var tableContent = new DomRange; + var buf = []; + DomRange.insert(tableContent, table); + var trRange = htmlRange("Hello"); + tableContent.add(trRange); + test.isTrue(tableContent.contains(trRange)); + }); + + inDocument(htmlRange("
"), function (r) { + var table = r.elements()[0]; + var tableContent = new DomRange; + var buf = []; + DomRange.insert(tableContent, table); + var trRange = htmlRange("Hello"); + var tr = trRange.elements()[0]; + tableContent.add('tr', tr); + test.equal(_.keys(tableContent.members).length, 1); + test.isTrue(tableContent.contains(tr)); + tableContent.remove('tr'); + // bizarrely, in IE 8, the `tr` still has some + // DocumentFragment as its parent even though `removeChild` + // has been called on it directly. + test.isFalse(tr.parentNode && tr.parentNode.nodeType === 1); + }); +}); + Tinytest.add("ui - DomRange - events in tables", function (test) { inDocument(htmlRange("
"), function (r) { var table = r.elements()[0];