fix ie bug with null and orphans elements

This commit is contained in:
Misko Hevery 2010-04-26 16:49:34 -07:00
parent 02fa10f93c
commit 2a7cd9f390
3 changed files with 21 additions and 12 deletions

View file

@ -91,12 +91,15 @@ function extensionMap(angular, name) {
} }
function jqLiteWrap(element) { function jqLiteWrap(element) {
if (isString(element)) { // for some reasons the parentNode of an orphan looks like null but its typeof is object.
var div = document.createElement('div'); if (element) {
div.innerHTML = element; if (isString(element)) {
element = new JQLite(div.childNodes); var div = document.createElement('div');
} else if (!(element instanceof JQLite) && isElement(element)) { div.innerHTML = element;
element = new JQLite(element); element = new JQLite(div.childNodes);
} else if (!(element instanceof JQLite) && isElement(element)) {
element = new JQLite(element);
}
} }
return element; return element;
} }

View file

@ -132,7 +132,7 @@ Compiler.prototype = {
directives = false; directives = false;
var parent = element.parent(); var parent = element.parent();
template.addInit(widget.call(selfApi, element)); template.addInit(widget.call(selfApi, element));
if (parent) { if (parent && parent[0]) {
element = jqLite(parent[0].childNodes[elementIndex]); element = jqLite(parent[0].childNodes[elementIndex]);
} }
} }

View file

@ -220,7 +220,10 @@ JQLite.prototype = {
return this[0].innerHTML; return this[0].innerHTML;
}, },
parent: function() { return jqLite(this[0].parentNode);}, parent: function() {
return jqLite(this[0].parentNode);
},
clone: function() { return jqLite(this[0].cloneNode(true)); } clone: function() { return jqLite(this[0].cloneNode(true)); }
}; };
@ -228,11 +231,14 @@ if (msie) {
extend(JQLite.prototype, { extend(JQLite.prototype, {
text: function(value) { text: function(value) {
var e = this[0]; var e = this[0];
if (isDefined(value)) {
e.innerText = value;
}
// NodeType == 3 is text node // NodeType == 3 is text node
return e.nodeType == 3 ? e.nodeValue : e.innerText; if (e.nodeType == 3) {
if (isDefined(value)) e.nodeValue = value;
return e.nodeValue;
} else {
if (isDefined(value)) e.innerText = value;
return e.innerText;
}
}, },
trigger: function(type) { trigger: function(type) {