javascript克隆元素样式的实现代码

复制代码 代码如下:

  /**

  * 克隆元素样式

  * @param {HTMLElement} 被克隆的元素

  * @param {Boolean} 是否启用缓存(默认true)

  * @return {String} css类名

  */

  var cloneStyle = (function (doc) {

  var rstyle = /^(number|string)$/,

  cloneName = '${cloneName}',

  sData = {},

  addHeadStyle = function (content) {

  var style = sData[doc];

  if (!style) {

  style = sData[doc] = doc.createElement('style');

  doc.getElementsByTagName('head')[0].appendChild(style);

  };

  style.styleSheet && (style.styleSheet.cssText += content) || style.appendChild(doc.createTextNode(content));

  },

  getStyle = 'getComputedStyle' in window ? function (elem, name) {

  return getComputedStyle(elem, null)[name];

  } : function (elem, name) {

  return elem.currentStyle[name];

  };

  return function (source, cache) {

  if (!cache && source[cloneName]) return source[cloneName];

  var className, name,

  cssText = [],

  sStyle = source.style;

  for (name in sStyle) {

  val = getStyle(source, name);

  if (val !== '' && rstyle.test(typeof val)) {

  name = name.replace(/([A-Z])/g,"-$1").toLowerCase();

  cssText.push(name);

  cssText.push(':');

  cssText.push(val);

  cssText.push(';');

  };

  };

  cssText = cssText.join('');

  source[cloneName] = className = 'clone' + (new Date).getTime();

  addHeadStyle('.' + className + '{' + cssText + '}');

  return className;

  };

  }(document));

  演示:

  

   [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]