<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>공부하자</title>
    <link>https://mhfe.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 22 May 2026 14:07:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Ratus</managingEditor>
    <item>
      <title>css 스타일 주기.(element.style.속성명),(element.classList.add/remove/toggle)</title>
      <link>https://mhfe.tistory.com/46</link>
      <description>&lt;pre id=&quot;code_1679474277689&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const a = document.querySelector('#abc');

a.style.backgroundColor = '#000000';
a.style.속성명 = '속성값';&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;카멜 표기법을 이용하여 속성을 나타내고, 속성 값의 경우 ' ' 혹은 &quot; &quot; 로 감싸서 작성한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;style 프로퍼티를 이용하면 태그에 직접적으로 값이 적용된다. &lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;setAttribute와 비슷한 효과.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;스타일 우선순위가 바뀐다거나, 같은 스타일을 여러가지 태그에 적용해야 할 때는 불필요한 코드가 많아짐.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;태그의 class를 변경하는 방식이 좀 더 권장 됨.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-2cab7c07-dcdc-4e16-9354-c2d4a4931bfa&quot; style=&quot;background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2264d212-a778-4c04-947c-4607cd3bb46a&quot; style=&quot;background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;className &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;특정 태그에 스타일을 줄 때 class의 name을 전부 바꿔버림&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1679474303663&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- 예를들어 --&amp;gt;
&amp;lt;div class = &quot;a&quot; &amp;gt;
  &amp;lt;div class = &quot;b&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;b 라는 클래스를 가진 div가 존재할 때 다음과 같은 스크립트를 작성하면&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1679474327287&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const a = document.querySelector('.a');

a.children[0].className = 'c';&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;HTML 실행 시 class 'a'가'c'로 변경된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1679474415699&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class = &quot;a&quot; &amp;gt;
  &amp;lt;div class = &quot;c&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div id=&quot;SE-6919fcda-2c9f-4672-a975-1149e357beee&quot; style=&quot;background-color: #f9fafb; color: #112e46; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;그런데, 기존의 class 를 놔두고 새로운 class를 추가하고 싶다면 어떻게 해야할까?&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;바로 classList 를 이용하는 것이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-e4daef6e-348f-4090-938c-e75a50b8d4ab&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7bb33050-ab44-4537-905b-0fee091e0c5d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;classList&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;클래스를 다루는 프로퍼티&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;add : 클래스를 추가&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;remove : 클래스를 삭제&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;toggle : 클래스가 있으면 삭제하고, 없으면 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-1683ab22-37e0-4c1e-b5b5-25d28e3540b7&quot; style=&quot;background-color: #f9fafb; color: #112e46; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #272822; color: #f8f8f2;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1679474449552&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a.children[0].classList.add('c'); /* 결과 : class = 'a c' */
a.children[0].classList.remove('c'); /* 결과 : class = 'a' */
/* 여러 개의 class 추가 삭제 시  */
a.children[0].classList.add('c','d','e'); /* 컴마를 통해 추가 */ /* 결과 : class = 'a c d e' */
a.children[0].classList.remove('c','d','e'); /* 컴마를 통해 추가 */ /* 결과 : class = 'a' */

a.children[0].classList.toggle('c'); /* c 라는 클래스가 있으면 삭제, 없으면 추가 */
a.children[0].classList.toggle('c',true); /* 두 번째에 Boolean 값을 받아 true 이면 add */
a.children[0].classList.toggle('c',false); /* 두 번째에 Boolean 값을 받아 false 이면 remove */&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Js</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/46</guid>
      <comments>https://mhfe.tistory.com/46#entry46comment</comments>
      <pubDate>Wed, 22 Mar 2023 17:41:03 +0900</pubDate>
    </item>
    <item>
      <title>getAttribute,setAttribute,removeAttribute</title>
      <link>https://mhfe.tistory.com/45</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;getAttribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;속성에 접근한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;JavaScript에서 해당 속성에 접근하여 추가 작업을 필요로 할 때 사용.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-cac35a8b-3264-4e9b-8664-dfd47be7f56a&quot; style=&quot;background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;​&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bc8e048f-1c0c-4eb8-ae14-c96267e3c460&quot; style=&quot;background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;setAttribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;JavaScript를 이용해 태그의 속성 값을 변경.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;해당 속성이 없다면, 속성이 추가된다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;이 속성은 HTML 문서에 직접 적용된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-96c5c1cb-6e19-41b8-9dad-4723876ecbb6&quot; style=&quot;background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a3f7bf6c-0766-4b07-98b5-66d50eee3469&quot; style=&quot;background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;removeAttribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f9fafb; color: #112e46; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;속성을 지워버린다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Js</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/45</guid>
      <comments>https://mhfe.tistory.com/45#entry45comment</comments>
      <pubDate>Wed, 22 Mar 2023 17:14:54 +0900</pubDate>
    </item>
    <item>
      <title>네이버 스마트에디터 2.0 집어넣기</title>
      <link>https://mhfe.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 Front-end 만 이용했음을 우선 밝힙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 실제 기능적으로는 동작하지 않는게 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 사진 업로드 기능을 제공하는 버전인 2.8.2 버전을 이용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/naver/smarteditor2/releases/tag/v2.8.2.3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/naver/smarteditor2/releases/tag/v2.8.2.3&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1677807243766&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Release v2.8.2.3: archive v2.8.2.4259f59 &amp;middot; naver/smarteditor2&quot; data-og-description=&quot;2.8.2.3 보안 패치 file_uploader_html5.php의 null byte injection 취약점 추가 보완 file_uploader.php의 리다이렉트 취약점 보완 sample.php에서 XSS filtering을 위해 HTMLPurifier라이브러리를 적용 sample.php -&amp;gt; sample/viewer/in&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/naver/smarteditor2/releases/tag/v2.8.2.3&quot; data-og-url=&quot;https://github.com/naver/smarteditor2/releases/tag/v2.8.2.3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bh3Ety/hyROHNlidI/JeKwmX0i1nPWkpYdE48NMk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/naver/smarteditor2/releases/tag/v2.8.2.3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/naver/smarteditor2/releases/tag/v2.8.2.3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bh3Ety/hyROHNlidI/JeKwmX0i1nPWkpYdE48NMk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Release v2.8.2.3: archive v2.8.2.4259f59 &amp;middot; naver/smarteditor2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2.8.2.3 보안 패치 file_uploader_html5.php의 null byte injection 취약점 추가 보완 file_uploader.php의 리다이렉트 취약점 보완 sample.php에서 XSS filtering을 위해 HTMLPurifier라이브러리를 적용 sample.php -&amp;gt; sample/viewer/in&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 링크에 들어가서 ZIP 파일을 다운받습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축을 풀면 긴 폴더명이 있는데요, 그걸 본인이 원하는 폴더명으로 바꿉니다. 저는 smarteditor 라는 폴더명을 이용했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름을 바꾼 smarteditor 폴더를 기존에 작업하던 폴더로 옮겨 담습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;213&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MdqSg/btr1udyzOsJ/COkX7fSNi5yym086hC1Xj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MdqSg/btr1udyzOsJ/COkX7fSNi5yym086hC1Xj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MdqSg/btr1udyzOsJ/COkX7fSNi5yym086hC1Xj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMdqSg%2Fbtr1udyzOsJ%2FCOkX7fSNi5yym086hC1Xj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;213&quot; height=&quot;468&quot; data-origin-width=&quot;213&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 저의 경우는 scatch1 이라는 작업 폴더 안에 smarteditor 라는 폴더를 집어넣었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 스마트 에디터를 집어넣을 html 파일을 선택한 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jquery를 추가해줍니다. 네이버 스마트 에디터를 이용하려면 Jquey를 이용합니다. 저는 최신 버전을 삽입했습니다.&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1677807483731&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 스마트에디터를 불러옵니다.&lt;/p&gt;
&lt;pre id=&quot;code_1677807554535&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&quot;../smarteditor/js/HuskyEZCreator.js&quot; charset=&quot;utf-8&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우 상대경로를 이용하였고, smarteditor폴더안의 js 폴더 안의 HuskyEZCreator.js 를 경로로 설정하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 에디터를 넣을 위치에 &amp;lt;textarea&amp;gt; 태그를 추가하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1677807698511&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;textarea class=&quot;wrap_editor&quot; name=&quot;editorTxt&quot; id=&quot;editorTxt&quot; rows=&quot;20&quot; cols=&quot;10&quot;
          placeholder=&quot;내용을 입력해주세요&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 에디터가 안불러졌을 때 테스트를 위해 &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;class 를 이용하였습니다. class는 빼셔도 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;중요 : 저는 textarea를 form태그 안에 집어넣었습니다. 만약에 안되면 이용할 textarea를 form태그안에 넣어보세요.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막으로 연결된 js 파일에 에디터 설정을 해줘야합니다. 다음과 같은 코드를 붙여넣어주세요.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677807912692&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    let oEditors = []

    smartEditor = function() {
      console.log(&quot;Naver SmartEditor&quot;)
      nhn.husky.EZCreator.createInIFrame({
        oAppRef: oEditors,
        elPlaceHolder: &quot;editorTxt&quot;,
        sSkinURI: &quot;/smarteditor/SmartEditor2Skin.html&quot;,
        fCreator: &quot;createSEditor2&quot;
      })
    }

    $(document).ready(function() {
      smartEditor()
    })
  &amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요한것은&amp;nbsp;&lt;b&gt;sSkinURI :&amp;nbsp;&lt;/b&gt;입니다. 이건 SmartEditor2SKin.html 파일의 정확한 상대 경로/절대 경로를 입력해줘야합니다. 본인의 파일 위치로 수정해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 끝입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 스마트 에디터 위에 이렇게 버전이 적혀있을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;242&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kBw0O/btr1EgA7Wgq/f1Tr9Em45nKdOMtEwW6tHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kBw0O/btr1EgA7Wgq/f1Tr9Em45nKdOMtEwW6tHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kBw0O/btr1EgA7Wgq/f1Tr9Em45nKdOMtEwW6tHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBw0O%2Fbtr1EgA7Wgq%2Ff1Tr9Em45nKdOMtEwW6tHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;242&quot; height=&quot;28&quot; data-origin-width=&quot;242&quot; data-origin-height=&quot;28&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 SmartEditor2SKin.html 파일을 열어서 코드를 수정해주시면 되는데요,&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1677808079816&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;span id=&quot;rev&quot;&amp;gt;Version: 2.8.2.4259f59 &amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 코드를 찾아서 지워주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;*웹을 열어서 확인했을 때 에디터가 안보일 수 있습니다. 콘솔창을 열어서 확인했을 때 &lt;span style=&quot;color: #ee2323;&quot;&gt;accessing a cross-origin frame. &lt;span style=&quot;color: #000000;&quot;&gt;이라는 오류가 있다면, LiveServer extension을 이용하시거나, 웹 서버에 올린 뒤 확인해보시면 정상적으로 작동하는지 확인할 수 있습니다. 해당 오류는 충돌을 막는것으로, 로컬 서버에서는 작동이 안되게 설정이 되어있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Js</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/44</guid>
      <comments>https://mhfe.tistory.com/44#entry44comment</comments>
      <pubDate>Fri, 3 Mar 2023 10:51:11 +0900</pubDate>
    </item>
    <item>
      <title>css 애니메이션 효과(3/2 공부)</title>
      <link>https://mhfe.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;출처- &lt;a href=&quot;https://youtu.be/krdFNe2R27E&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/krdFNe2R27E&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=krdFNe2R27E&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/JytJr/hyRNDMm3Ov/vURIeccYpCmUnKF6tD0uTK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=622_222_828_388&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/krdFNe2R27E&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@keyframes 는 움직임 시간의 흐름을 관리하는 규칙.&lt;/p&gt;
&lt;pre id=&quot;code_1677758084364&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@keyframes name{
	from{ /* 속성: 값 */ } /* from : 애니메이션의 시작 장면 */
	n% { /* 속성: 값 */ } /* n% : 시작점부터 n% 흐른 시점의 장면. ex) 시작점부터 50% 흐른 시점 */
    to { /* 속성: 값 */ } /* to : 끝이 되는 장면 */
	
}

/* 여기서 장면은 실제 추가적인 장면이라기 보다는 프레임 단위의 행위..? 동작..? 을 뜻하는 듯 함 */&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation-name : @keyframes 애니메이션의 이름을 지정해서 요소로 가져온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation-duration : 애니메이션이 한 주기를 완료하는데 걸리는 시간을 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation-delay : 애니메이션 시작에 대한 지연을 지정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation-iteration-count : 애니메이션을 재생해야 하는 횟수를 지정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation-direction : 애니메이션을 앞으로, 뒤로 또는 번갈아 재생해야 하는지 여부를 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation-timing-function : 애니메이션의 속도 곡선을 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation-fill-mode : 애니메이션이 재생되지 않을 때(시작 전, 종료 후 또는 둘 다) 요소의 스타일을 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation-play-state : 애니메이션이 실행 중인지 일시 중지되었는지 지정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.animation-name &amp;amp; animation-duration (ctrl + F 를 이용하면 찾기가 편합니다.)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677757931898&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;css

/* 애니메이션 선언 */
/* img를 왼쪽 끝에서 오른쪽 끝으로 보내는 애니메이션. */
@keyframes move{ /* move 라는 이름의 애니메이션 선언 */
	from{ /* 애니메이션의 시작점 */
		left: 0;
		transform: rotate(0deg);
	}
	to{ /* 애니메이션의 끝점 */
		left: 500px;
		transform: rotate(360deg);
	}
}
/* animation-name 등장 */
img{
	animation-name : move; /* 애니메이션을 적용할 태그 or 클래스에 애니메이션 move를 연결 */
	animation-duration : 1s; /* 애니메이션이 동작할 시간. 이걸 적용안하면 애니메이션이 동작하지 않음. */
	position : relative; /* move를 보면 left 라는 속성을 사용했음. 이는 position 속성으로 기준점을 잡아줘야한다. */
}

/* img가 여러개라면 각각의 이미지의 duration을 따로 줄 수도 있음. */
img:nth-child(1){ /* :nth-child(n) 에서 첫 번째 자식은 0이 아니라 1이다. */
	animation-duration : 1s;
}
img:nth-child(2){
	animation-duration : 2s;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. animation-iteration-count&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677759740070&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;css
/* 우선 1번에서 이용한 keyframes를 그대로 이용. */

img:nth-child(1){
	animation-iteration-count : 1; /* 기본 값, 한 번 재생 */
}
img:nth-child(2){
	animation-iteration-count : 4; /* 네 번 재생 */
}
img:nth-child(3){
	animation-iteration-count : infinite; /* 무한 재생 */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. animation-direction&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677760909204&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;상단의 keyframes를 이용..


/* animation-direction 은 애니메이션을 앞으로, 뒤로, 또는 번갈아 재생 할 것인지를 정한다. */

img:nth-child(1){
	animation-direction : normal; /* 기본 값, 정방향 */
}
img:nth-child(2){
	animation-direction : reverse; /* 역방향 */
}
img:nth-child(3){
	animation-direction : alternate; /* 왕복 - 애니메이션 재생 횟수가 많아야함. 그래야 왕복이 보임. */
}
img:nth-child(4){
	animation-direction : alternate-reverse; /* 역방향 왕복 */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. animation-delay&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677761261748&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* 상단의 keyframes 이용 */
/* 애니메이션 시작 전 delay(지연)를 걸어줌 */
img:nth-child(1){
	animation-delay: 0.5s;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. animation-fill-mode&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677761496785&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* 상단의 keyframes 이용 */

/* animation-fill-mode : 애니메이션이 재생되지 않을 때(시작 전, 종료 후, 혹은 둘 다) 요소의 스타일을 지정 */
img:nth-child(1){
	animation-fill-mode : backwards; /* 정지시 첫 번째 키프레임(from)으로 이동. */
}
img:nth-child(2){
	animation-fill-mode : forwards; /* 정지시 마지막 키프레임(to)으로 이동. */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. animation-play-state&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677761645774&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* 상단의 keyframes 이용 */

/* animation-play-state : 애니메이션이 실행중인지, 일시 중지 되었는지 지정. */

img:hover{/* 이미지 위에 마우스를 올려 두었을 때. */
	animation-play-state : paused; /* 제자리에 멈춤. 이미지에서 마우스를 떼면 다시 움직임. */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. animation-timing-function&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677762106598&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* 상단의 keyframes 이용 */

/* animation-timing-funtion : 애니메이션의 속도 곡선을 지정. */

img:nth-child(1){
	animation-timing-funtion : ease; /* 기본 값(기본 속도) */
}
img:nth-child(1){
	animation-timing-funtion : ease-in; /* 가속 */
}
img:nth-child(1){
	animation-timing-funtion : ease-out; /* 감속 */
}
img:nth-child(1){
	animation-timing-funtion : ease-in-out;  /* 시작은 감속 돌아올 때는 감속 */
}
img:nth-child(1){
	animation-timing-funtion : linear; /* 균등 속도 */
}
img:nth-child(1){
	animation-timing-funtion : cubic-bezier(0.785,0.135,0.15,0.86);; /* 속도 곡선을 임의로 만듦 */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;animation 도 한줄로 작성 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1677762483331&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;animation : /* 이름 시간 속도 지연시간 횟수 방향 fillmode playstate; */

animation : /* (name) (duration) (timing-funtion) (delay) (iteration-count) (direction) (fill-mode) (play-state); */&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CSS</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/43</guid>
      <comments>https://mhfe.tistory.com/43#entry43comment</comments>
      <pubDate>Thu, 2 Mar 2023 22:14:11 +0900</pubDate>
    </item>
    <item>
      <title>transform(x축,y축,z축 회전)(+position과의 차이)(3/2공부)</title>
      <link>https://mhfe.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;출처는 &lt;a href=&quot;https://www.youtube.com/watch?v=DVvXE4uN1oA&quot;&gt;https://www.youtube.com/watch?v=DVvXE4uN1oA&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp; 이분의 영상을 참고했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=DVvXE4uN1oA&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bMPwSX/hyROOMaGBv/0obSnHw0OreEDn1XE7ELDK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=620_222_832_402&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/DVvXE4uN1oA&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;transform - 요소를 변형시키는 함수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2D transform&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;translate(x,y) : 요소를 이동시키는 함수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scale(x,y) : 요소의 크기를 변형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rotate(deg) : 요소를 회전시키는 함수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;skew(x,y) : 요소를 기울이는 함수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;matrix(n,n,n,n,n,n) : 6개의 행렬을 사용하여 2d transform 값을 한번에 처리.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 순서대로, (scale x, skew x, skew y, scale y, translate x, translate y)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 방법.(ctrl + F 를 이용하면 더 편하게 볼 수 있습니다.)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.scale - 크기 변경&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677753346099&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;css
/* scale 사용법. - 크기 변경. */

.abc{
	transform : scale(0.5,0.5); /* x축과 y축 모두 크기 변경 */
	transform : scaleX(0.5); /* x축 크기 변경 */
	transform : scaleY(0.5); /* y축 크기 변경 */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. translate - 이동.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677753566572&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;css

/* translate - 이동. */

.abc{
	transform: translate(20px,-20px); /* x축 y축 모두 이동. */
	transform: translateX(20px); /* x축만 이동 */
	transform: translateY(-20px); /* y축만 이동 */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. skew - 기울기.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677753764929&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;css

/* skew - 기울기 */

.abc{
	transform: skew(20deg,-20deg); /* x,y 모두 기울기 */
	transform: skewX(20deg); /* x축만 기울기 */
	transform: skewY(20deg); /* y축만 기울기 */	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. rotate - 회전&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677753964368&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;css 


/* rotate - 회전 */

.abc{
	transform: rotate(30deg); /* 우측회전 */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. matrix - 한번에 처리&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677754120393&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;css

/* matrix - 한꺼번에 배열로 처리 */

.abc{
	transform: matrix(0.5,0.3,0.2,0.5,10,10);
    /* matrix(scaleX,skewX,skewY,scaleY,translateX,translateY); - translate의 단위는 적지 않음. */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;transform-origin : 요소가 변형될 때 변형의 기준점.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;transform-origin : (x축 위치) (y축 위치); - 위치는 top, right, bottom, left, center&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677754311070&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.abc{
	transform-origin: left top;
	transform-origin: center;
	transform-origin: right bottom;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3D transform&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;rotateX,rotateY,rotateZ&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677754776357&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.abc{
	transform: rotateX(180deg); /* x축 기준 회전 */
	transform: rotateY(180deg); /* y축 기준 회전 */
	transform: rotateZ(180deg); /* z축 기준 회전 */
}

/* 회전에 더욱 생동감을 주려면 */
.abc{
	perspective : 200px; /* 을 주면 됨. - 3D 요소가 표시되는 방식에 대한 관점 */
}

// backspace-visibility : visible or hidden;

.abc{
	backspace-bisibility : visible; /* div 박스의 뒷면이 보임.(기본 값) */
	backspace-bisibility : hidden; /* div 박스의 뒷면이 안보임. */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;transform 함수는 여러개를 동시에 사용할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1677754848967&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.abc{
	transform: scale(1,2) rotate(90deg); /* 띄어쓰기를 이용하여 사용 가능. */
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;position absolute는 본인의 공간이 사라지고 div 구조가 붕괴되지만,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;translate는 본인의 공간을 유지한 상태로 이동한다.&lt;/p&gt;</description>
      <category>CSS</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/42</guid>
      <comments>https://mhfe.tistory.com/42#entry42comment</comments>
      <pubDate>Thu, 2 Mar 2023 20:03:13 +0900</pubDate>
    </item>
    <item>
      <title>공부 한 것들을 다 나눌 예정</title>
      <link>https://mhfe.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지금은 몇월 몇일 공부 이런식으로 제목이 되어있는데, 이게 생각보다 다시 보려고 찾는게 어렵다고 생각해서..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보기 편한 방식으로 바꿀 예정.&lt;/p&gt;</description>
      <category>끄적끄적</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/41</guid>
      <comments>https://mhfe.tistory.com/41#entry41comment</comments>
      <pubDate>Thu, 2 Mar 2023 16:03:29 +0900</pubDate>
    </item>
    <item>
      <title>getElementsByClassName,querySelector(3/2 공부)</title>
      <link>https://mhfe.tistory.com/40</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;getElementsByClassName 은 배열로 반환됨. 고로 하나의 클래스만 이용할 때는 아래와 같이 사용해야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1677740415381&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const a = document.getElementsByClassName('a');

a[0] = 명령어;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 하나의 클래스만 이용할 때는 아래와 같이 사용하는게 더 편안하다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1677740519429&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const a = document.querySelector('a');

a = 명령어;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속도로만 보면 querySelector 가 빠르다는듯..&amp;nbsp;&lt;/p&gt;</description>
      <category>Js</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/40</guid>
      <comments>https://mhfe.tistory.com/40#entry40comment</comments>
      <pubDate>Thu, 2 Mar 2023 16:02:41 +0900</pubDate>
    </item>
    <item>
      <title>forEach문 - check박스를 이용한 비밀번호 표시(비밀번호 보기)</title>
      <link>https://mhfe.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 나는 check 박스를 click했을 때 checked 가 true 이면 input의 타입을 바꾸고, false일때도 바꾸는 식을 작성했는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(true : 비밀번호 password를 text로 false : text를 password로)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 확인창까지 같은 반복문으로 사용하려하니 name을 이용해야했고, 이러니 NodelList가 생성되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 노드리스트의 반복을 위해 forEach문을 알아보기로 했다.(찾아봤을때 많이들 사용하고 있길래..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 가볍다는듯....? 아직 자세하겐 몰라서 아 대충 이런거군. 이라는 느낌으로 봐주면 좋겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 나의 경우 NodelList가 되어버린 name의 파라미터(매개변수)명을 정해주고 시작하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const pwdOpen = document.getElementByName('pwd'); // pwdOpen이라는 이름으로 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;name이 pwd인 input의 파라미터를 불러온다.(나의 경우 비밀번호 입력 input과 비밀번호 확인 input의 name을 pwd로 통일했다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그로인해 NodelList가 생성되었다. 이를 console.log(pwdOpen); 해보면 아래처럼 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ix12X/btrZuCkRshJ/yKcYvzOeLke3TviaMe1Oq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ix12X/btrZuCkRshJ/yKcYvzOeLke3TviaMe1Oq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ix12X/btrZuCkRshJ/yKcYvzOeLke3TviaMe1Oq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIx12X%2FbtrZuCkRshJ%2FyKcYvzOeLke3TviaMe1Oq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;358&quot; height=&quot;30&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 배열명이 되어버린 pwdOpen을 나타내보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const pwdOpen = [input#pwd, input#pwdcheck];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 forEach를 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const pwdOpen = [input#pwd, input#pwdcheck];&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;pwdOpen.forEach(function(&lt;b&gt;pw&lt;/b&gt;) {&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;console.log(&lt;b&gt;pw&lt;/b&gt;);&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;})&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;결과물은&amp;nbsp; console 창에서&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxlJXG/btrZrfLiJWQ/Y1PA3gakEwcNxfudj02XO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxlJXG/btrZrfLiJWQ/Y1PA3gakEwcNxfudj02XO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxlJXG/btrZrfLiJWQ/Y1PA3gakEwcNxfudj02XO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxlJXG%2FbtrZrfLiJWQ%2FY1PA3gakEwcNxfudj02XO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;52&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;이런식으로 나온다. 또한 아래처럼 작성해도 결과는 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;pwdOpen.forEach(&lt;b&gt;pw &lt;/b&gt;=&amp;gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;console.log(&lt;b&gt;pw&lt;/b&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f;&quot;&gt;})&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 순차적으로 한번 씩 다 출력하는 걸 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 말은 즉, 배열pwdOpen을 index[0]부터 index.length까지 순회한다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문을 이용하는 것에 비해 훨씬 간결하게 작성할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 비밀번호 보기에 들어가보도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 조건을 달자면,&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QOuWK/btrZtrDWkSS/GlNtmkwfbqbSOJ19eTWBlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QOuWK/btrZtrDWkSS/GlNtmkwfbqbSOJ19eTWBlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QOuWK/btrZtrDWkSS/GlNtmkwfbqbSOJ19eTWBlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQOuWK%2FbtrZtrDWkSS%2FGlNtmkwfbqbSOJ19eTWBlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;581&quot; height=&quot;339&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비밀번호 입력란의 id와 name은 pwd 이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비밀번호 확인란의 id는 pwdCheck, name은 pwd로 비밀번호 입력란과 동일하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;체크박스를 이용하여, type=password로 가려진 비밀번호를 type=text로 바꿔 볼 수 있도록 하고 싶다.(주요사항)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비밀번호 보기의 id는 pwdOpen이고, onclick 프로퍼티를 이용하여 클릭시 이벤트가 일어나도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*프로퍼티란 객체 자체에 프로퍼티로 이벤트를 주는 것 이다. 함수 하나만 할당이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pwd_open()함수를 onclick 프로퍼티에 연결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;준비가 다 되었다면 연결된 script를 보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UKWJo/btrZuC6ldAh/jJxHeYmRkSktioLxm0IKW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UKWJo/btrZuC6ldAh/jJxHeYmRkSktioLxm0IKW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UKWJo/btrZuC6ldAh/jJxHeYmRkSktioLxm0IKW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUKWJo%2FbtrZuC6ldAh%2FjJxHeYmRkSktioLxm0IKW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;488&quot; height=&quot;221&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음, 비밀번호 입력란만 체크박스를 이용하여 보도록 하는 코드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 입력란의 id인 pwd를 상수 pword로 파라미터를 연결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 보기(표시) 체크박스의 id인 pwdOpen을 상수 check로 파라미터 연결을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1)비밀번호 입력란에 비밀번호를 입력한 후 제대로 입력했는지 확인&lt;/b&gt;하거나, &lt;b&gt;(2)규칙이 어려워 내가 비밀번호를 제대로 치고있는지 확인&lt;/b&gt;하기 위해 다음과 같은 &lt;b&gt;체크박스를 넣어 체크하면 동작하는 방식&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 다음과 같이 표현할 수도 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0NX8K/btrZuGOpHHE/G8B5M4OzzBbHm2qYIArd20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0NX8K/btrZuGOpHHE/G8B5M4OzzBbHm2qYIArd20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0NX8K/btrZuGOpHHE/G8B5M4OzzBbHm2qYIArd20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0NX8K%2FbtrZuGOpHHE%2FG8B5M4OzzBbHm2qYIArd20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;205&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문 안에서 boolean값이 있다면, 기본값은 boolean값이 true일때 괄호안의 문장이 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기때문에, 굳이 check.checked를 true와 같은지 확인하지 않아도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해석하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 체크박스가 체크되었을때if(check.checked)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 비밀번호입력란의 type 속성이 기본 설정값인 password에서 text로 {pword.setAttribute('type','text')} 변한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 아니면(체크를 다시 해제하면) (else) 바뀐 설정값인 text에서 password로 다시 바뀐다.{pword.setAttribute('type','password')}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면, 비밀번호 입력란과, 비밀번호 확인란 모두 체크박스 하나로 컨트롤 하려면 어떻게 할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 처음 생각했을때는 name을 이용하면 될 것 같다고 생각했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 인풋을 한꺼번에 통제하기 위해서 name을 통일 시키면 통제가 가능하기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 name을 이용해서 두가지의 input을 묶어보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s5Yzh/btrZsGIbpE9/nTlK2OkgjsiAF0WzmNnHBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s5Yzh/btrZsGIbpE9/nTlK2OkgjsiAF0WzmNnHBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s5Yzh/btrZsGIbpE9/nTlK2OkgjsiAF0WzmNnHBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs5Yzh%2FbtrZsGIbpE9%2FnTlK2OkgjsiAF0WzmNnHBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;473&quot; height=&quot;314&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pword에 getElementsByName('pwd');를 이용해 네임이 pwd인 input들을 다 가져온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ix12X/btrZuCkRshJ/yKcYvzOeLke3TviaMe1Oq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ix12X/btrZuCkRshJ/yKcYvzOeLke3TviaMe1Oq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ix12X/btrZuCkRshJ/yKcYvzOeLke3TviaMe1Oq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIx12X%2FbtrZuCkRshJ%2FyKcYvzOeLke3TviaMe1Oq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;358&quot; height=&quot;30&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이렇게 노드 리스트가 생성된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 이 노트 리스트를 0번 노드부터 1번노드까지 두번 &lt;span&gt;순회해야한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러기 위해서 반복문을 사용해야하는데 가장 가볍고 간단한 forEach문을 사용할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존과 방식은 같다. if문이 true이면 내부의 실행문이 실행되는 형식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. if(true)이면 내부에서 반복문이 실행된다. name=pwd인 input들의 type이 text로 바뀐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.if(false)이면 역시 반복문을 실행한다. name=text로 바뀐 input들을 다시 password로 바꾼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와같이 체크박스를 이용한 비밀번호 표시를 해낼 수 있었다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Js</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/37</guid>
      <comments>https://mhfe.tistory.com/37#entry37comment</comments>
      <pubDate>Thu, 16 Feb 2023 02:00:20 +0900</pubDate>
    </item>
    <item>
      <title>회원가입 유효성 검사</title>
      <link>https://mhfe.tistory.com/35</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유효성 검사를 할때는 함수를 하나 만들고 그 안에 다 때려 박아서 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여태껏 많은 블로그들을 돌아보았고, 너무 오래된 것들이라 정보 찾기가 힘들었는데, 많은 분들의 도움을 받아 해냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 여타 블로그들의 경우 사용한 방식은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;button의 type을 submit에서 button으로 바꾼 이후 script 에서 onclick을 이용해 작동 시키는 방식을 많이 사용했는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 input에 값을 입력하고 엔터를 치면 서브밋이 되어버리는 문제가 생겼다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오로지 회원가입 버튼으로만 한다면 모를까, 엔터를 쳐버리면 action이 동작해버리니 큰 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문제를 해결하기 위해 엔터기능을 막는 방안을 이용했어야 했는데, 해당 기능을 구현하지 못하였고, 구현과정에서 계속 오류가 나서 만들기를 실패했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 form에 onsubmit = &quot;return joinform_check()&quot;를 줘서 submit을 작동 시키는 방식이 있었고, 이 방법이 훨씬 편했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;onsubmit은 사용자가 input 에 값을 입력하고, form을 통해 값을 보내 action의 경로로 진입하기 직전! 바로 그 타이밍에 동작하는 이벤트핸들러이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;onsubmit = return false 를 하게되면 false 라는 거짓값이 return(돌아오다)하게 되는데, 그러면 action이 작동하지 못하고 현재페이지에 머물게 된다. 이를 이용하여, onsubmit = &quot;return joinform_check()&quot;를 동작시키고 유효성 검사 함수인&amp;nbsp; joinform_check()의 결과값이 true 이면 정상적으로 action이 작동하게 만들고, false 이면&amp;nbsp; action이 작동하지 못하게 하여 현재페이지에 머물게 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 유효성 테스트를 위한 함수. 이름만 입력받는다는 가정을 했을때.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #c792ea;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #eeffff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #82aaff;&quot;&gt;joinform_check&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #89ddff;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #eeffff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #89ddff;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c792ea;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;uname&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #82aaff;&quot;&gt;querySelector&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #c3e88d;&quot;&gt;#name&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;//이름 파라미터의 값를 가져옴.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c792ea;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;regName&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c3e88d;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #c3e88d;&quot;&gt;가-힣&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;]{2,30}&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;// 이름 규칙&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c792ea;&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;checkAll&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff9cac;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;// 유효성 검사 결과 최종 값이 들어갈 곳. 기본값 true&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;regName&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #82aaff;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;uname&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;// 이름 규칙 확인&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #82aaff;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #c3e88d;&quot;&gt;이름은 한글 2~30자 이내로 작성해주세요.&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;// 창띄우기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;uname&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #82aaff;&quot;&gt;focus&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;// 이름으로 돌아가기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;checkAll&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff9cac;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #eeffff;&quot;&gt;checkAll&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #f07178;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff9cac;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #f07178;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #89ddff;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #89ddff; background-color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Js</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/35</guid>
      <comments>https://mhfe.tistory.com/35#entry35comment</comments>
      <pubDate>Wed, 15 Feb 2023 01:07:43 +0900</pubDate>
    </item>
    <item>
      <title>정규식</title>
      <link>https://mhfe.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes&quot;&gt;Character classes - JavaScript | MDN (mozilla.org)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1676370230765&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Character classes - JavaScript | MDN&quot; data-og-description=&quot;Character classes distinguish kinds of characters such as, for example, distinguishing between letters and digits.&quot; data-og-host=&quot;developer.mozilla.org&quot; data-og-source-url=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes&quot; data-og-url=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b9cLef/hyRC0TZvCt/rV00TShoDugq6i7k0tSGyK/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b9cLef/hyRC0TZvCt/rV00TShoDugq6i7k0tSGyK/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Character classes - JavaScript | MDN&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Character classes distinguish kinds of characters such as, for example, distinguishing between letters and digits.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.mozilla.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규식은 항상 //를 작성하고 시작.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex)우편번호 5자리를 받고싶음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const reg_post = /^\d{5}$/;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;^ : 꺽새표시가 붙으면 무조건 바로 뒤에오는 패턴만으로 값이 시작되어야 한다는 뜻. ex)^\d 는 오로지 숫자로만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\d &lt;span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 숫자라는 뜻.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{x} &lt;span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; x자리만큼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ &lt;span&gt;:&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;끝내겠다. 라는 소리. 예시에선 5자리가 나오면 끝내버린다 라는 뜻.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 전화번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const reg_tel = /^(02|064)-(\d{3}|\d{4})-\d{4})$/;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(02|064) &lt;span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 처음은 무조건 02 아니면 064이다. | 를 이용해 값을 늘릴 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;' - ' &lt;span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;nbsp;' - '는 하이픈으로 값을 입력할 때 꼭 같이 입력을 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const reg_mobile = /^(010)-\d{4}-\d{4}$/;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const reg_email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\w :&amp;nbsp; a-z , A-Z, 0-9, _ 까지 이용가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ : 무조건 하나 이상의 앞의 패턴이 들어가야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\. :&amp;nbsp; ' . ' 은 정규 표현식에 들어 있는 패턴이므로, 문자로서의 ' . '을 이용하기 위해선 앞에 ' \ ' 를 붙여줘야한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[x]? : x라는 값이 있을 수도있고, 없을 수도 있다. 이어서 계속 작성하면 다 조건에 포함 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;nbsp; ex)[xyz]? : x와 y와 z가 있을 수도 있고, 없을 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* : 곱하기는 여러개 있을 수 있다는 뜻으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - ex) ([\.-]?\w+)* 에서는( .이나-가 있을 수도 있고, 문자는 무조건 하나 이상이다)가 여러개 있을 수 있다. 라는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@ : 무조건 @가 들어가야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\w{2,3} : 적어도 \w 패턴이 2개에서 3개 이상은 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(?= .* )은 보통 비밀번호 유효성 검사할 때 필수로 하나씩은 들어가야할 때 사용하는데, 작성한 모든 문자를 체크한다 라는 의미로 파악하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.이 모든 단일문자를 뜻하고, * 이 여러개를 뜻하니 합치면 여러개의 단일 문자 이기때문에 작성한 모든 문자를 체크한다라는 의미로 이용하면 될듯.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규식 테스트 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;console.log(reg_post.test('파라미터 or&amp;nbsp; 값 직접입력');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;true 가 나오면 정규식 통과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;false가 나오면 정규식 통과 실패&lt;/p&gt;</description>
      <category>Js</category>
      <author>Ratus</author>
      <guid isPermaLink="true">https://mhfe.tistory.com/34</guid>
      <comments>https://mhfe.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 14 Feb 2023 19:47:04 +0900</pubDate>
    </item>
  </channel>
</rss>