diff --git a/src/jqLite.js b/src/jqLite.js index 1fe2e4a026f4..0db4c25103f4 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -248,7 +248,7 @@ function jqLiteDealoc(element, onlyDescendants){ if (element.childNodes && element.childNodes.length) { // we use querySelectorAll because documentFragments don't have getElementsByTagName - var descendants = element.getElementsByTagName ? element.getElementsByTagName('*') : + var descendants = element.getElementsByTagName ? sliceArgs(element.getElementsByTagName('*')) : element.querySelectorAll ? element.querySelectorAll('*') : []; for (var i = 0, l = descendants.length; i < l; i++) { jqLiteRemoveData(descendants[i]); diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 942e0eadb1f5..1eb8d319b246 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -535,6 +535,16 @@ describe('jqLite', function() { browserTrigger(span); expect(log).toEqual('click;'); }); + + it('should work if the descendants of the element change while it\'s being removed', function() { + var div = jqLite('

text

'); + div.find('p').on('$destroy', function() { + div.find('span').remove(); + }); + expect(function() { + div.remove(); + }).not.toThrow(); + }); }); });