CSS 조작 함수



CSS 조작 함수



지난 포스트에 이어 attr() 함수와 비슷한 구조로 해당 엘리먼트의 style 값을 조작하는 기능을 작성해 보았습니다.


작성된 함수는 아래와 같습니다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <TITLE> New Document </TITLE>
  4. <META NAME="Generator" CONTENT="EditPlus">
  5. <META NAME="Author" CONTENT="">
  6. <META NAME="Keywords" CONTENT="">
  7. <META NAME="Description" CONTENT="">
  8. </HEAD>
  9. <BODY style="margin:0;padding:0;">
  10. <script type="text/javascript">
  11. //<![CDATA[
  12.  
  13. var Element = (function(win, doc){
  14.      
  15.    return new (function(){
  16.      
  17.        function init(){  
  18.          
  19.            return this;
  20.        }
  21.  
  22.        init.prototype = {
  23.            css: css
  24.        };
  25.  
  26.  
  27.        return init;
  28.  
  29.    }());
  30.  
  31.    // 속성 가져오기/변경하기
  32.    function css(elem, args, value)
  33.    {
  34.        elem = elem || top.document.documentElement;
  35.        args = args || (args && args.constructor === Object ? {} : '');
  36.        value = value || '';
  37.  
  38.        if (args.constructor === Object){
  39.          
  40.            for (var n in args){
  41.                 elem.style[n] = args[n];
  42.            }
  43.  
  44.            return elem;
  45.        }
  46.        else if (args.constructor === String){
  47.          
  48.            if (value)
  49.            {
  50.                elem.style[args] = value;
  51.              
  52.                return elem;
  53.            }
  54.            else
  55.            {
  56.                 if (top.document.defaultView && top.document.defaultView.getComputedStyle){
  57.                     // element 의 스타일 객체를 생성한다.
  58.                     var style = top.document.defaultView.getComputedStyle(elem, '');
  59.                     // style 객체의 getPropertyValue는 textAlign이 아닌 text-align 과 같은 속성 이름으로 값을 가져온다.
  60.                     return style && style.getPropertyValue(args.replace(/([A-Z])/g, '-$1').toLowerCase());
  61.                 }
  62.                 else if (elem.style[args]){
  63.                     return elem.style[args];
  64.                 }
  65.                 else if (elem.currentStyle){
  66.                     return elem.currentStyle[args];
  67.                 }
  68.            }
  69.        }
  70.    };  
  71.      
  72. }(window, document));
  73.  
  74.  
  75. window.onload = function()
  76. {
  77.     var elem = document.getElementsByTagName('div')[0];
  78.    
  79.     // 해당 엘리먼트에 style 설정
  80.     Element.css(elem, {
  81.         position:'absolute',
  82.         color:'red',
  83.         textAlign:'center'
  84.     });
  85.    
  86.     // position 설정을 변경한다.
  87.     Element.css(elem, 'position', 'relative');
  88.  
  89.     // 정의된 position 값을 가져온다.
  90.     alert(Element.css(elem, 'position')); // relative
  91.    
  92. };
  93.  
  94.  
  95. //]]>
  96. <div id="root_offset1" style="position:relative;top:100px;left:100px;width:2000px;height:2200px;">dada
  97.     <div id="root_offset2" style="position:relative;top:100px;left:100px">sadasd
  98.         <div id="root_offset3" style="position:relative;top:100px;left:200px;width:200px;height:200px;">test</div>
  99.     <div>
  100. <div>
  101. </BODY>
  102. </HTML>



  1. if (top.document.defaultView && top.document.defaultView.getComputedStyle){
  2.     // element 의 스타일 객체를 생성한다.
  3.     var style = top.document.defaultView.getComputedStyle(elem, '');
  4.     // style 객체의 getPropertyValue는 textAlign이 아닌 text-align 과 같은 속성 이름으로 값을 가져온다.
  5.     return style && style.getPropertyValue(args.replace(/([A-Z])/g, '-$1').toLowerCase());
  6. }


위 코드는 파이어폭스 브라우저만을 위한 코드이며, 해당 엘리먼트의 스타일 객체를 생성하여 그에 따른 스타일 속성값을 가져오는 코드입니다. 

또한, 속성값을 가져오기 위한 getPropertyValue() 함수의 첫 번째 매개변수로 속성 이름을 전달하는데,


전달 시 속성 이름을 text-align과 같은 형태로 전달하기 위해 정규식을 활용하여 전달받은 문자열을 대체시켰습니다.