mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-06-16 18:29:57 +08:00
fix(jqLite): correctly dealoc svg elements in IE
SVG elements in IE don't have a `.children` but only `.childNodes` so it broke.
We started using `.children` for perf in e35abc9d2f.
This also acts as a perf improvements, since
`getElementsByTagName` is faster than traversing the tree.
Related #8075
This commit is contained in:
@@ -243,12 +243,16 @@ function jqLiteClone(element) {
|
||||
return element.cloneNode(true);
|
||||
}
|
||||
|
||||
function jqLiteDealoc(element){
|
||||
jqLiteRemoveData(element);
|
||||
var childElement;
|
||||
for ( var i = 0, children = element.children, l = (children && children.length) || 0; i < l; i++) {
|
||||
childElement = children[i];
|
||||
jqLiteDealoc(childElement);
|
||||
function jqLiteDealoc(element, onlyDescendants){
|
||||
if (!onlyDescendants) jqLiteRemoveData(element);
|
||||
|
||||
if (element.childNodes && element.childNodes.length) {
|
||||
// we use querySelectorAll because documentFragments don't have getElementsByTagName
|
||||
var descendants = element.getElementsByTagName ? element.getElementsByTagName('*') :
|
||||
element.querySelectorAll ? element.querySelectorAll('*') : [];
|
||||
for (var i = 0, l = descendants.length; i < l; i++) {
|
||||
jqLiteRemoveData(descendants[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,9 +434,7 @@ function jqLiteInheritedData(element, name, value) {
|
||||
}
|
||||
|
||||
function jqLiteEmpty(element) {
|
||||
for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {
|
||||
jqLiteDealoc(childNodes[i]);
|
||||
}
|
||||
jqLiteDealoc(element, true);
|
||||
while (element.firstChild) {
|
||||
element.removeChild(element.firstChild);
|
||||
}
|
||||
@@ -630,9 +632,7 @@ forEach({
|
||||
if (isUndefined(value)) {
|
||||
return element.innerHTML;
|
||||
}
|
||||
for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {
|
||||
jqLiteDealoc(childNodes[i]);
|
||||
}
|
||||
jqLiteDealoc(element, true);
|
||||
element.innerHTML = value;
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user