public/ckeditor/_source/core/dom/element.js
function( dest, skipAttributes )
		{
			var attributes = this.$.attributes;
			skipAttributes = skipAttributes || {};

			for ( var n = 0 ; n < attributes.length ; n++ )
			{
				var attribute = attributes[n];

				// Lowercase attribute name hard rule is broken for
				// some attribute on IE, e.g. CHECKED.
				var attrName = attribute.nodeName.toLowerCase(),
					attrValue;

				// We can set the type only once, so do it with the proper value, not copying it.
				if ( attrName in skipAttributes )
					continue;

				if ( attrName == 'checked' && ( attrValue = this.getAttribute( attrName ) ) )
					dest.setAttribute( attrName, attrValue );
				// IE BUG: value attribute is never specified even if it exists.
				else if ( attribute.specified ||
				  ( CKEDITOR.env.ie && attribute.nodeValue && attrName == 'value' ) )
				{
					attrValue = this.getAttribute( attrName );
					if ( attrValue === null )
						attrValue = attribute.nodeValue;

					dest.setAttribute( attrName, attrValue );
				}
			}

			// The style:
			if ( this.$.style.cssText !== '' )
				dest.$.style.cssText = this.$.style.cssText;
		}
function( dest, skipAttributes )
		{
			var attributes = this.$.attributes;
			skipAttributes = skipAttributes || {};

			for ( var n = 0 ; n < attributes.length ; n++ )
			{
				var attribute = attributes[n];

				// Lowercase attribute name hard rule is broken for
				// some attribute on IE, e.g. CHECKED.
				var attrName = attribute.nodeName.toLowerCase(),
					attrValue;

				// We can set the type only once, so do it with the proper value, not copying it.
				if ( attrName in skipAttributes )
					continue;

				if ( attrName == 'checked' && ( attrValue = this.getAttribute( attrName ) ) )
					dest.setAttribute( attrName, attrValue );
				// IE BUG: value attribute is never specified even if it exists.
				else if ( attribute.specified ||
				  ( CKEDITOR.env.ie && attribute.nodeValue && attrName == 'value' ) )
				{
					attrValue = this.getAttribute( attrName );
					if ( attrValue === null )
						attrValue = attribute.nodeValue;

					dest.setAttribute( attrName, attrValue );
				}
			}

			// The style:
			if ( this.$.style.cssText !== '' )
				dest.$.style.cssText = this.$.style.cssText;
		}
function ( dest , skipAttributes ) { var attributes = this . $ . attributes ; skipAttributes = skipAttributes || { } ; for ( var n = 0 ; n < attributes . length ; n ++ ) { var attribute = attributes [ n ] ; // Lowercase attribute name hard rule is broken for
 // some attribute on IE, e.g. CHECKED.
 var attrName = attribute . nodeName . toLowerCase ( ) , attrValue ; // We can set the type only once, so do it with the proper value, not copying it.
 if ( attrName in skipAttributes ) continue ; if ( attrName == 'checked' && ( attrValue = this . getAttribute ( attrName ) ) ) dest . setAttribute ( attrName , attrValue ) ; // IE BUG: value attribute is never specified even if it exists.
 else if ( attribute . specified || ( CKEDITOR . env . ie && attribute . nodeValue && attrName == 'value' ) ) { attrValue = this . getAttribute ( attrName ) ; if ( attrValue === null ) attrValue = attribute . nodeValue ; dest . setAttribute ( attrName , attrValue ) ; } } // The style:
 if ( this . $ . style . cssText !== '' ) dest . $ . style . cssText = this . $ . style . cssText ; }
Copy all the attributes from one node to the other, kinda like a clone
skipAttributes is an object with the attributes that must NOT be copied.
@param {CKEDITOR.dom.element} dest The destination element.
@param {Object} skipAttributes A dictionary of attributes to skip.
@example
Copy all the attributes from one node to the other kinda like a clone skipAttributes is an object with the attributes that must NOT be copied .