diff --git a/src/jqLite.js b/src/jqLite.js index d012707650f9..75b512e13d6d 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -174,8 +174,36 @@ function JQLite(element) { } } +function JQLiteCloneData(src, dst) { + if (src.nodeType !== 1 || !jqLite.hasData(src)) + return; + + var data = jqLite(src).data(); + + forEach(data, function(value, key){ + jqLite(dst).data(key, value); + }); +} + function JQLiteClone(element) { - return element.cloneNode(true); + var clone = element.cloneNode(true); + + if (element.nodeType !== 1) + return clone; + + JQLiteCloneData(element, clone); + + var getAll = element.getElementsByTagName || element.querySelectorAll || function(){return []}, + srcAll = getAll.call(element, '*'), + dstAll = getAll.call(clone, '*'); + + for(var i = 0 ; i < srcAll.length ; i++) { + var src = srcAll[i], + dst = dstAll[i]; + JQLiteCloneData(src, dst); + } + + return clone; } function JQLiteDealoc(element){ diff --git a/src/ng/compile.js b/src/ng/compile.js index 04a1a4388d0d..091fb8efb2ee 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -322,7 +322,7 @@ function $CompileProvider($provide) { // We can not compile top level text elements since text nodes can be merged and we will // not be able to attach scope data to them, so we will wrap them in forEach($compileNode, function(node, index){ - if (node.nodeType == 3 /* text node */) { + if (node.nodeType == 3 /* text node */ && node.childNodes.length /* non-empty */) { $compileNode[index] = jqLite(node).wrap('').parent()[0]; } });