DomHelper-more.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:5k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.1.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ /**
  2.  * @class Ext.DomHelper
  3.  */
  4. Ext.apply(Ext.DomHelper,
  5. function(){
  6. var pub,
  7. afterbegin = 'afterbegin',
  8.      afterend = 'afterend',
  9.      beforebegin = 'beforebegin',
  10.      beforeend = 'beforeend';
  11. // private
  12.     function doInsert(el, o, returnElement, pos, sibling, append){
  13.         el = Ext.getDom(el);
  14.         var newNode;
  15.         if (pub.useDom) {
  16.             newNode = createDom(o, null);
  17.             if (append) {
  18.             el.appendChild(newNode);
  19.             } else {
  20.          (sibling == 'firstChild' ? el : el.parentNode).insertBefore(newNode, el[sibling] || el);
  21.             }
  22.         } else {
  23.             newNode = Ext.DomHelper.insertHtml(pos, el, Ext.DomHelper.createHtml(o));
  24.         }
  25.         return returnElement ? Ext.get(newNode, true) : newNode;
  26.     }
  27. // build as dom
  28.     /** @ignore */
  29.     function createDom(o, parentNode){
  30.         var el,
  31.          doc = document,
  32.          useSet,
  33.          attr,
  34.          val,
  35.          cn;
  36.         if (Ext.isArray(o)) {                       // Allow Arrays of siblings to be inserted
  37.             el = doc.createDocumentFragment(); // in one shot using a DocumentFragment
  38.         Ext.each(o, function(v) {
  39.                 createDom(v, el);
  40.             });
  41.         } else if (Ext.isString(o)) {         // Allow a string as a child spec.
  42.             el = doc.createTextNode(o);
  43.         } else {
  44.             el = doc.createElement( o.tag || 'div' );
  45.             useSet = !!el.setAttribute; // In IE some elements don't have setAttribute
  46.             Ext.iterate(o, function(attr, val){
  47.                 if(!/tag|children|cn|html|style/.test(attr)){
  48.                 if(attr == 'cls'){
  49.                     el.className = val;
  50.                 }else{
  51.                         if(useSet){
  52.                             el.setAttribute(attr, val);
  53.                         }else{
  54.                             el[attr] = val;
  55.                         }
  56.                 }
  57.                 }
  58.             });
  59.             Ext.DomHelper.applyStyles(el, o.style);
  60.             if ((cn = o.children || o.cn)) {
  61.                 createDom(cn, el);
  62.             } else if (o.html) {
  63.                 el.innerHTML = o.html;
  64.             }
  65.         }
  66.         if(parentNode){
  67.            parentNode.appendChild(el);
  68.         }
  69.         return el;
  70.     }
  71. pub = {
  72. /**
  73.      * Creates a new Ext.Template from the DOM object spec.
  74.      * @param {Object} o The DOM object spec (and children)
  75.      * @return {Ext.Template} The new template
  76.      */
  77.     createTemplate : function(o){
  78.         var html = Ext.DomHelper.createHtml(o);
  79.         return new Ext.Template(html);
  80.     },
  81. /** True to force the use of DOM instead of html fragments @type Boolean */
  82.     useDom : false,
  83.     /**
  84.      * Creates new DOM element(s) and inserts them before el.
  85.      * @param {Mixed} el The context element
  86.      * @param {Object/String} o The DOM object spec (and children) or raw HTML blob
  87.      * @param {Boolean} returnElement (optional) true to return a Ext.Element
  88.      * @return {HTMLElement/Ext.Element} The new node
  89.          * @hide (repeat)
  90.      */
  91.     insertBefore : function(el, o, returnElement){
  92.         return doInsert(el, o, returnElement, beforebegin);
  93.     },
  94.     /**
  95.      * Creates new DOM element(s) and inserts them after el.
  96.      * @param {Mixed} el The context element
  97.      * @param {Object} o The DOM object spec (and children)
  98.      * @param {Boolean} returnElement (optional) true to return a Ext.Element
  99.      * @return {HTMLElement/Ext.Element} The new node
  100.          * @hide (repeat)
  101.      */
  102.     insertAfter : function(el, o, returnElement){
  103.         return doInsert(el, o, returnElement, afterend, 'nextSibling');
  104.     },
  105.     /**
  106.      * Creates new DOM element(s) and inserts them as the first child of el.
  107.      * @param {Mixed} el The context element
  108.      * @param {Object/String} o The DOM object spec (and children) or raw HTML blob
  109.      * @param {Boolean} returnElement (optional) true to return a Ext.Element
  110.      * @return {HTMLElement/Ext.Element} The new node
  111.          * @hide (repeat)
  112.      */
  113.     insertFirst : function(el, o, returnElement){
  114.         return doInsert(el, o, returnElement, afterbegin, 'firstChild');
  115.     },
  116.     /**
  117.      * Creates new DOM element(s) and appends them to el.
  118.      * @param {Mixed} el The context element
  119.      * @param {Object/String} o The DOM object spec (and children) or raw HTML blob
  120.      * @param {Boolean} returnElement (optional) true to return a Ext.Element
  121.      * @return {HTMLElement/Ext.Element} The new node
  122.          * @hide (repeat)
  123.      */
  124.     append: function(el, o, returnElement){
  125.             return doInsert(el, o, returnElement, beforeend, '', true);
  126.         },
  127.     /**
  128.      * Creates new DOM element(s) without inserting them to the document.
  129.      * @param {Object/String} o The DOM object spec (and children) or raw HTML blob
  130.      * @return {HTMLElement} The new uninserted node
  131.      */
  132.         createDom: createDom
  133. };
  134. return pub;
  135. }());