1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
| (function(spaceName){
/*------------------------priver-----------------------*/
//element servant a créer les élément html, via innerHTML
var element = document.createElement('div'),
isIE = /msie/i.test(navigator.userAgent),
parent;//parent référencant tout les élément créer depuis une cahine de caractere
//céer des élements depuis une string
function createHTML(str, toReturn){
element.innerHTML = '';
var wrap = /^<(thead|tbody|tfoot|colg|cap)/i.test(str) ? [ 1, "<table>", "</table>" ]
: /^<tr/i.test(str) ? [ 2, "<table><tbody>", "</tbody></table>" ]
: /^(<td|<th)/i.test(str) ? [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ]
: /^<opt/i.test(str) ? [ 1, "<select multiple='multiple'>", "</select>" ]
: /^<leg/i.test(str) ? [ 1, "<fieldset>", "</fieldset>" ]
: /^<col/i.test(str) ? [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] : null;
parent = element;
if(wrap){
parent.innerHTML = wrap[1] + str + wrap[2];
//on définit ele, le dernier parent
while (wrap[0]--)
parent = parent.lastChild;
}else
//sinon on remplit dans la reférence de element de la chaine html
parent.innerHTML = str;
if(toReturn){
var ret = Array.prototype.slice.call(parent.childNodes);
return ret.length - 1 ? ret : ret[0];
}
}
//céer des élements via une syntaxe JSON
function createJSON(object){
var tag = object.tag,
items = object.items,
el;
delete object.tag;
delete object.items;
if(isIE)if(tag.toLowerCase() == 'input'){
el = document.createElement('<input type="'+object.type+'" '+(object.checked ? 'checked="checked"' : '')+(object.name ? 'name="'+object.name+'"' : '')+'>');
}else if(tag.toLowerCase() == 'select'){
el = document.createElement('<select '+(object.multiple ? 'multiple="multiple"' : '')+(object.name ? 'name="'+object.name+'"' : '')+'>');
}else if(tag.toLowerCase() == 'textarea')
el = document.createElement('<textarea '+(object.name ? 'name="'+object.name+'"' : '')+'></textarea>');
el = el || document.createElement(tag);
for(var i in object)
spaceName.setAttribute(el, i, object[i]);
if(items)
getFuncInsertion(items)(el, items);
object.tag = tag;
object.items = items;
return el;
}
//céer des élements via une syntaxe JSON
function createArray(array){
for(var i = 0, l = array.length, ret = []; i < l; i++){
ret[i] = getFunctionCreate(array[i])(array[i], true);}
return ret;
}
//retourne la fonction de création en fonction du type fournit
function getFunctionCreate(els){
return typeof els == 'string' ? createHTML : els.constructor == Object ? createJSON : createArray;
}
//inser un élement a partir d'une sible et d'une position(before)
function insert(el, sible, before){
if(before){
sible.parentNode.insertBefore(el, sible);
}else sible.appendChild(el);
}
//insertion des élement via une string
function insertHTML(el, str, before){
createHTML(str);
var elem;
while (parent.childNodes[0]){
elem = parent.removeChild(parent.childNodes[0]);
insert(elem, el, before);
}
}
//insertion des élement via une JSON
function insertJSON(el, object, before){
var els = createJSON(object);
insert(els, el, before);
}
//insertion des élement via un noeud HTML
function insertNod(el, nod, before){
insert(nod, el, before);
}
//insertion des élements via un tableau ou une collection
function insertArray(el, array, before){
for(var i = 0, l = array.length; i < l; i++)
getFuncInsertion(array[i])(el, array[i], before);
}
//retourne la fonction d'insertion en fonction du type fournit
function getFuncInsertion(els){
return typeof els == 'string' ? insertHTML : els.constructor == Object ? insertJSON : els.length ? insertArray : insertNod;
}
function setOpacity(element,value) {
value = value < 0.00001 ? 0 : value;
if(isIE){
element.style.filter = 'alpha(opacity=' + value * 100+ ')';
}else
element.style.opacity = value;
};
//création d'un objet d'acces rapide au propriété accéssible uniquement comme propriété du noeud
var camelGroupe = ['colSpan', 'rowSpan', 'vAlign', 'dateTime', 'accessKey', 'tabIndex', 'encType', 'maxLength', 'readOnly', 'longDesc', 'cellPadding', 'cellSpacing', 'frameBorder', 'useMap', 'id'];
for (var i = 0, c, isCamel = {'class' : 'className', 'className' : 'className', id : 'id', 'for' : 'htmlFor'}; c = camelGroupe[i]; i++)
isCamel[c.toLowerCase()] = c;
//création d'un objet d'acces rapide au propriété accéssible uniquement comme propriété du noeud, et dont dont les valeur de typoe bool doivent avoir une notation XHTML
var boolGroupe = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
for (var i = 0, c, isBool = {}; c = boolGroupe[i]; i++)
isBool[c] = c;
/*------------------------publique-----------------------*/
//par forcement nécessaire, mais pour etre en 'harmonie' avec toute les autres fonctions
spaceName.getHTML = function(el){
return el.innerHTML;
}
spaceName.getOutherHTML = function(el){
element.innerHTML = '';
element.appendChild(el.cloneNode(true));
return element.innerHTML;
}
spaceName.getAttribute = function(el, attr){
if(attr == 'style')
return el.style.cssText;
var camel, bool;
return r = isIE || (camel = isCamel[attr]) || (bool = isBool[attr]) ? el[camel || bool || attr] : el.getAttribute(attr);
}
spaceName.setAttribute = function(el, attr, value){
if(attr == 'style')
return spaceName.setStyle(el, value);
var camel = isCamel[attr],
bool = isBool[attr];
if(bool && !value){
el[bool] = null;
}else if(isIE || camel || bool){
el[camel || bool || attr] = bool || value;
}else el.setAttribute(attr, value);
}
spaceName.removeAttribute = function(el, attr){
if(attr == 'style'){
el.style.cssText = '';
return;
}
var camel = isCamel[attr],
bool = isBool[attr];
if(isIE || camel || bool){
el[camel || bool || attr] = null;
}else el.removeAttribute(attr);
}
spaceName.setStyle = function(el, style){
if (typeof style == 'string'){
el.style.cssText += ';' + style;
if(style.indexOf('opacity') > -1)
setOpacity(el, style.match(/opacity:\s*(\d?\.?\d*)/)[1]);
}else for(var i in style){
if(i == 'opacity'){
setOpacity(el, style[i]);
}else el.style[i == 'float' ? 'cssFloat': i] = style[i];
}
}
spaceName.setHTML = function(el, els){
el.innerHTML = '';
getFuncInsertion(els)(el, els);
}
spaceName.append = spaceName.insertIntoLast = function(el, els){
getFuncInsertion(els)(el, els);
}
spaceName.prepend = spaceName.insertBefore = function(el, els){
getFuncInsertion(els)(el, els, true);
}
spaceName.insertIntoFirst = function(el, els){
var ele;
getFuncInsertion(els)((ele = el.childNodes[0]) ? ele : el, els, !!ele);
}
spaceName.insertAfter = function(el, els){
var ele;
getFuncInsertion(els)((ele = el.nextSibling) ? ele : el.parentNode, els, !!ele);
}
spaceName.createElement = function(els){
return getFunctionCreate(els)(els);
}
})(window)//->remplacer windows par votre espace de nom |
Partager