diff options
| -rw-r--r-- | src/jqLite.js | 5 | ||||
| -rw-r--r-- | src/widgets.js | 19 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/jqLite.js b/src/jqLite.js index 8554263a..78fc1655 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -66,7 +66,7 @@ function JQLite(element) { div.innerHTML = '<div> </div>' + element; // IE insanity to make NoScope elements work! div.removeChild(div.firstChild); // remove the superfluous div JQLiteAddNodes(this, div.childNodes); - this.remove(); // detach the elements form the temporary DOM div. + this.remove(); // detach the elements from the temporary DOM div. } else { JQLiteAddNodes(this, element); } @@ -136,8 +136,7 @@ function JQLiteAddNodes(root, elements) { ? elements : [ elements ]; for(var i=0; i < elements.length; i++) { - if (elements[i].nodeType != 11) - root.push(elements[i]); + root.push(elements[i]); } } } diff --git a/src/widgets.js b/src/widgets.js index a7d59289..2b44fccc 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -914,6 +914,8 @@ angularWidget('@ng:repeat', function(expression, element){ lastIterElement = iterStartElement, collection = this.$tryEval(rhs, iterStartElement), collectionLength = size(collection, true), + fragment = (element[0].nodeName != 'OPTION') ? document.createDocumentFragment() : null, + addFragment, childScope, key; @@ -938,13 +940,26 @@ angularWidget('@ng:repeat', function(expression, element){ children.push(childScope); linker(childScope, function(clone){ clone.attr('ng:repeat-index', index); - lastIterElement.after(clone); - lastIterElement = clone; + + if (fragment) { + fragment.appendChild(clone[0]); + addFragment = true; + } else { + //temporarily preserve old way for option element + lastIterElement.after(clone); + lastIterElement = clone; + } }); } index ++; } } + + //attach new nodes buffered in doc fragment + if (addFragment) { + lastIterElement.after(jqLite(fragment)); + } + // shrink children while(children.length > index) { children.pop().$element.remove(); |
