aboutsummaryrefslogtreecommitdiffstats
path: root/src/widgets.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets.js')
-rw-r--r--src/widgets.js19
1 files changed, 17 insertions, 2 deletions
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();