createDom(o, parentNode)是Ext.DomHelper的静态方法.
var c = [{}, {}];
Ext.createDom(c, document);
function createDom(o, parentNode){
var el,
doc = document,
useSet,
attr,
val,
cn;
if (Ext.isArray(o)) {
el = doc.createDocumentFragment();//创建一个存放兄弟节点的容器
Ext.each(o, function(v) {
createDom(v, el); //递归调用数组的每个元素
});
} else if (Ext.isString(o)) {
el = doc.createTextNode(o);
} else {
el = doc.createElement( o.tag || 'div' );
useSet = !!el.setAttribute; //IE下有些属性没有setAttribute(!!转换boolean的小技巧)
Ext.iterate(o, function(attr, val){//Ext的对象迭代器,o迭代的对象,attr对象的属性名,val对象的属性值
if(!/tag|children|cn|html|style/.test(attr)){
if(attr == 'cls'){
el.className = val;//设置样式名
}else{//设置其他属性
if(useSet){
el.setAttribute(attr, val);
}else{
el[attr] = val;
}
}
}
});
pub.applyStyles(el, o.style);//应用样式
if ((cn = o.children || o.cn)) {
createDom(cn, el);//如果属性配置了子容器,刚刚创建的元素作为父节点,迭代继续...
} else if (o.html) {
el.innerHTML = o.html;
}
}
if(parentNode){
parentNode.appendChild(el);
}
return el;
}