/**
* @ignore
* traversal ie hack
* @author yiminghe@gmail.com
*/
KISSY.add('dom/ie/traversal', function (S, Dom) {
Dom._contains = function (a, b) {
if (a.nodeType == Dom.NodeType.DOCUMENT_NODE) {
a = a.documentElement;
}
// !a.contains => a===document || text
// 注意原生 contains 判断时 a===b 也返回 true
b = b.parentNode;
if (a == b) {
return true;
}
// when b is document, a.contains(b) 不支持的接口 in ie
if (b && b.nodeType == Dom.NodeType.ELEMENT_NODE) {
return a.contains && a.contains(b);
} else {
return false;
}
};
var div = document.createElement("div");
div.appendChild(document.createComment(""));
var getElementsByTagName;
if (div.getElementsByTagName("*").length) {
getElementsByTagName = function (name, context) {
var nodes = context.getElementsByTagName(name),
needsFilter = name == '*';
// <input id='length'>
if (needsFilter || typeof nodes.length != 'number') {
var ret = [],
i = 0,
el;
while (el = nodes[i++]) {
if (!needsFilter || el.nodeType === 1) {
ret.push(el);
}
}
return ret;
} else {
return nodes;
}
};
} else {
getElementsByTagName = function (name, context) {
return context.getElementsByTagName(name);
};
}
Dom._getElementsByTagName = getElementsByTagName;
var getAttr = Dom._getSimpleAttr;
Dom._getElementById = function (id, doc) {
var el = doc.getElementById(id);
if (el && getAttr(el, 'id') !== id) {
var children = getElementsByTagName('*', doc);
for (var i = 0, l = children.length; i < l; i++) {
if (getAttr(children[i], 'id') == id) {
return children[i];
}
}
}
return el;
};
}, {
requires: ['dom/base']
});