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 216 217 218 219 220 221
| /**
* Supprime espace en début et fin de chaine
* @method trim
* @param {String} str - la chaine à nettoyer
* @return {String} la chaine nettoyée.
* @comment : avantage par rapport à la méthode String.prototype.trim(), elle traite les undefined
*/
function trim(str) {
return (null === str || undefined === str) ? "" : ("" + str).replace(/^\s*|\s*$/g, "");
}
/**
* Supprime les espaces début et fin des propriétes et valeurs et ajoute un ; à la fin de la chaine
* @method formatInlineStyle
* @param {String} style - chaine à traiter
* @returns {String} result - chaine style formaté
*/
function formatInlineStyle(style) {
var i;
var props;
var prop;
var p0;
var p1;
var result = [];
// supprime ; de fin si existe
style = style || "";
style = style.replace(/;$/, "");
// récup. des styles
props = style.split(";");
for (i = 0; props[i]; i += 1) {
// traitement des propriétées-valeurs
prop = props[i].split(":");
p0 = trim(prop[0]);
p1 = trim(prop[1]);
// stockage si les 2 existent
if (p0 && p1) {
result.push(p0 + ":" + p1);
}
}
// ajout des ;
result.push("");
style = result.join(";");
return style;
}
/**
* Transforme une chaine en object
* @method style2Object
* @param {String} style - chaine à traiter
* @returns {Object} result - Objet contenant les {key:value} des styles
* @example :
* - entrée
* <span style="font-size: 1em; color: blue">
* - retour
* {"font-size": "1em", "color": "blue"}
*/
function style2Object(style) {
var i;
var props;
var prop;
var result = null;
var s;
// mise au format pour tests
s = formatInlineStyle(style);
// si existe style
if (s) {
result = {};
// supprime ; de fin
s = s.replace(/;$/, "");
// récup. des styles
props = s.split(";");
for (i = 0; props[i]; i += 1) {
// traitement des propriétées-valeurs
prop = props[i].split(":");
result[prop[0]] = prop[1];
}
}
return result;
}
/**
* Transforme un style inline en object
* @method getInlineStyleObject
* @param {String/Object} elem - id élément ou élément
* @returns {Object} result - Objet contenant les {key:value} des styles
* @example :
* - la récup de
* <span style="font-size:1em;color:blue">
* - retourne
* {"font-size": "1em", "color": "blue"}
*/
function getInlineStyleObject(elem) {
var i;
var props;
var prop;
var result = null;
var s;
// récup. élément suivant type noeud/id
elem = "object" === (typeof (elem)) ? elem : document.getElementById(elem);
if (elem && 1 === elem.nodeType) {
// récup. style inline
s = (elem.getAttribute) ? elem.getAttribute("style") : false;
// si existe style
if (s) {
result = style2Object(s);
}
}
return result;
}
/**
* Ajoute un style inline à un élément
* @method setInlineStyle
* @param {String/Object} elem - id élément ou élément
* @param {String} style - le style à affecter
* @returns {Object} elem - élément pour chainage
*/
function setInlineStyle(elem, style) {
// récup. élément suivant type noeud/id
elem = "object" === (typeof (elem)) ? elem : document.getElementById(elem);
if (elem && 1 === elem.nodeType) {
// formatage du style
// ajoute ; en fin si non existant
style = formatInlineStyle(style);
// récup. style actuel
var attr = elem.getAttribute("style");
// si existe
if (attr) {
// mise en forme du style
attr = formatInlineStyle(attr);
// concaténe le style
attr += style;
}
else {
// égal le style
attr = style;
}
// mise à jour attribut style
elem.setAttribute("style", attr);
}
// pour chainage
return elem;
}
/**
* Récupére le style inline d"un élément
* @method removeInlineStyle
* @param {String/Object} elem - id élément ou élément
* @param {String} style - le style à supprimer
* @returns {Object} elem - élément pour chainage
*/
function removeInlineStyle(elem, style) {
// récup. élément suivant type noeud/id
elem = "object" === (typeof (elem)) ? elem : document.getElementById(elem);
if (elem && 1 === elem.nodeType) {
// regExp à appliquer
var reg = new RegExp("(" + style + ".*?;)", "gi");
// récup. style actuel
var attr = elem.getAttribute("style");
// si existe
if (attr) {
// mise en forme du style
attr = formatInlineStyle(attr);
// supprime le style
attr = attr.replace(reg, "");
}
// modifie ou supprime si vide
if (attr && attr.length) {
elem.setAttribute("style", attr);
}
else {
elem.removeAttribute("style");
}
}
// pour chainage
return elem;
}
/**
* Récupére le style inline d"un élément
* @method getInlineStyle
* @param {String/Object} elem - id élément ou élément
* @returns {String} style - String du style inline
*/
function getInlineStyle(elem) {
var style = "";
// récup. élément suivant type noeud/id
elem = "object" === (typeof (elem)) ? elem : document.getElementById(elem);
if (elem && 1 === elem.nodeType) {
// récup. style actuel
style = elem.getAttribute("style");
// si existe
if (style) {
// supprime ; de fin, permet de faire un split(";")
style = style.replace(/;$/, "");
}
}
return style;
}
/**
* Remplace/Ajoute un style inline à un élément
* @method replaceInlineStyle
* @param {String/Object} elem - id élément ou élément
* @param {String} prop - la propriétée du style à affecter
* @param {String} value - la valeur de la propriétée du style à affecter
*/
function replaceInlineStyle(elem, prop, value) {
// récup. élément suivant type noeud/id
elem = "object" === (typeof (elem)) ? elem : document.getElementById(elem);
if (elem && 1 === elem.nodeType) {
// récup. style actuel
var s = elem.getAttribute("style");
// regExp à appliquer
var reg = new RegExp("(" + prop + ".*?;)", "gi");
// le style existe
if (reg.test(s)) {
s = s.replace(reg, prop + ":" + value);
}
else {
s = prop + ":" + value;
}
// mise au format
s = formatInlineStyle(s);
// mise à jour attribut style
elem.setAttribute("style", s);
}
} |
Partager