투케이2K

105. (javascript/자바스크립트) cloneNode 사용해 특정 요소 객체 복사 실시 및 id 아이디 , style 스타일 변경 실시 본문

JavaScript

105. (javascript/자바스크립트) cloneNode 사용해 특정 요소 객체 복사 실시 및 id 아이디 , style 스타일 변경 실시

투케이2K 2021. 8. 5. 09:20
반응형

[개발 환경 설정]

개발 툴 : Edit++

개발 언어 : javascript


[스크립트 소스코드]

    <!-- 내부 JS 지정 : 일반 -->
    <script>

        /*
        [JS 요약 설명]
        1. window.onload : 브라우저 로드 완료 상태를 나타냅니다
        2. cloneNode : 특정 객체 요소를 복사합니다 (true 설정 시 객체에 포함된 자식까지 모두 복사)
        3. document.body.appendChild : body 에 특정 태그를 추가합니다 
        4. setAttribute : 특정 태그 속성을 지정합니다 (초기 설정, 변경 등 ...)
        5. document.getElementById.style : 특정 태그 스타일 속성값을 변경합니다
        6. innerText : 특정 태그 텍스트 값을 확인 및 변경할 수 있습니다
        */



        /* [html 최초 로드 및 이벤트 상시 대기 실시] */
        window.onload = function() {
            console.log("");
            console.log("[window ready] : [start]");
            console.log("");
        };



        /* [이벤트 수행 부분] */        
        var copyCount = 1; // 복사가 수행된 개수 카운트 
        var copyTop = 10; // 원본 top 값이 5값이므로, 복사객체는 10부터 시작 및 5씩 증가
        
        function copyStart() {
            console.log("");
            console.log("[copyStart] : [start]");
            console.log("");

            // 복사를 수행할 객체 지정 실시 [원본 객체]
            var parentId = document.getElementById("container"); 


            // 변수 지정 실시  [true 설정 시 >> 자식까지 모두 복사]
            var copy = parentId.cloneNode(true);              


            // body에 추가를 실시합니다
            document.body.appendChild(copy);            


            // 복사가 완료된 객체 아이디 및 특정 스타일값 변경 실시
            var copy_id = "copy_" + String(copyCount); // 변경할 아이디 값 설정           
            copy.setAttribute("id", copy_id); // 아이디값 변경

            document.getElementById(copy_id).style.top = String(copyTop) + "%"; // top 스타일 속성 변경
            document.getElementById(copy_id).style.backgroundColor = "#ff00ff"; // 배경 색상 속성 변경


            // 복사된 객체에 포함된 자식 확인 실시 및 id 값 변경
            var childList = document.getElementById(copy_id).childNodes;

            var originalChildId;
            var changeChildId;
            for(var i=0; i<childList.length; i++){
                originalChildId = childList[i].id;
                if(originalChildId != null && originalChildId != "" && originalChildId != "undefined"){ // 아이디값 공백 및 널 체크 실시                    

                    changeChildId = "copy_" + String(copyCount) + "_txt"; // 자식 아이디 새로 지정
                    childList[i].setAttribute("id", changeChildId); // 자식 아이디값 변경

                    // 추가 여러 자식이 많을 경우 분기 처리해서 아이디 지정 가능 [예제에는 div 내에 p 태그 하나만 포함됨]
                    console.log("");
                    console.log("[copyStart] : [parentId] : " + copy_id);
                    console.log("[copyStart] : [originalChildId] : " + originalChildId);        
                    console.log("[copyStart] : [changeChild_id] : " + changeChildId); 
                    console.log("");  
                    
                }                
            }  
            document.getElementById(changeChildId).innerText = "복사 : " + String(copyCount); // 자식 p 태그 텍스트값 변경 실시


            // 전역 변수 복사 카운트 증가 및 top 값 증가 실시  
            copyCount ++; 
            copyTop = copyTop+5;  
        }; 
                
    </script>

[body 소스코드]

<body>

<!-- original layout -->
<div id = "container"
    style="width: 50%; height: 15%; margin: 0 auto; padding: 0; border: none; background-color: #444444; 
        float: top; position: relative; top: 5%; left: 0%; display: table;"
    onclick="copyStart();">

       <p id="txt" 
            style="display: table-cell; text-align: center; vertical-align: middle; color: #ffffff; font-size: 150%;">
            원본
        </p>
</div>

</body>

[결과 출력]


[요약 설명]

/*

[JS 요약 설명]

1. window.onload : 브라우저 로드 완료 상태를 나타냅니다

2. cloneNode : 특정 객체 요소를 복사합니다 (true 설정 시 객체에 포함된 자식까지 모두 복사)

3. document.body.appendChild : body 에 특정 태그를 추가합니다

4. setAttribute : 특정 태그 속성을 지정합니다 (초기 설정, 변경 등 ...)

5. document.getElementById.style : 특정 태그 스타일 속성값을 변경합니다

6. innerText : 특정 태그 텍스트 값을 확인 및 변경할 수 있습니다

*/


 

반응형
Comments