본문 바로가기

웹 프로그래밍

JSP, jQuery로 간단한 텍스트 편집기 만들기

@markdown

# JSP & jQuery로 간단한 텍스트 편집기 만들기

____

- HTML, CSS, jQuery 세 부분으로 구성

- 편집기 기능

  - 전체선택, 굵게, 기울임, 밑줄

  - 글자 정렬, 글꼴, 크기 변경

  - 글자 색, 배경색 변경

  

## HTML 텍스트 편집기 구성

____

- TextArea는 선택한 글자의 변경이 불가능하기 때문에 `<div>`의 `contenteditable` 속성을 사용한다.

<pre><code class="html" style="font-size:14px"><div id="text" contenteditable="true" style="width:400px; height:400px;">텍스트 편집기</div>

</code></pre>

- `contentEditable` 속성을 사용하면, 텍스트 편집 시 `jQuery`의 `execCommand()`로 편집 요소를 제어할 수 있게 된다.

<br>

### 전체 HTML 코드

____


<pre><code class="html" style="font-size:14px"><body>

  <div style="background-color:#CCFFFF; width:390px; padding: 10px;">

    <button id="selectAll">전체선택</button>

    <button id="bold">굵게</button>

    <button id="italic">기울임</button>

    <button id="underLine">밑줄</button>

    <br/>

    <button id="justifyLeft">왼쪽정렬</button>

    <button id="justifyCenter">가운데정렬</button>

    <button id="justifyRight">오른쪽정렬</button>

    <br/>

    

    <select id="fontName" width="50px">

        <option value="">글꼴 선택</option>

        <option value="돋움">돋움</option>

        <option value="굴림">굴림</option>

        <option value="궁서">궁서</option>

        <option value="바탕">바탕</option>

        <option value="맑은 고딕">맑은 고딕</option>

    </select>

    <select id="fontSize" width="50px">

        <option value="">글자 크기</option>

        <option value="1">4px</option>

        <option value="2">8px</option>

        <option value="3">10px</option>

        <option value="4">12px</option>

        <option value="5">16px</option>

        <option value="6">20px</option>

        <option value="7">30px</option>

    </select>

    <select id="foreColor" width="50px">

        <option value="">글자 색깔</option>

        <option value="#f00">빨강</option>

        <option value="#00f">파랑</option>

        <option value="#0f0">초록</option>

        <option value="#ffff00">노랑</option>

        <option value="#000">검정</option>

    </select>

    <select id="hiliteColor" width="50px">

        <option value="">글자 배경색</option>

        <option value="#f00">빨강</option>

        <option value="#00f">파랑</option>

        <option value="#0f0">초록</option>

        <option value="#ffff00">노랑</option>

        <option value="#000">검정</option>

    </select>

  </div>

  <div id="text" contenteditable="true" style="width:400px; height:400px;">텍스트 편집기</div>

</body>

</code></pre>


## CSS 꾸미기

____

- 일반 `<div>` 속성을 `TextArea` 처럼 꾸며주기 위해 아래와 같은 CSS를 지정한다.

- 설정해주게 되면 텍스트 편집 영역을 마우스로 지정할 수 있는 효과를 볼 수 있다.


<pre><code class="html" style="font-size:14px">#text {

    -moz-appearance: textfield-multiline;

    -webkit-appearance: textarea;

    border: 1px solid gray;

    font: medium -moz-fixed;

    font: -webkit-small-control;

    overflow: auto;

    padding: 2px;

    resize: both;

  }

</code></pre>


## jQuery 메소드 사용

_____

- 텍스트 편집기는 `jQuery`에서 제공하는 `execCommand`만을 통해 구현할 수 있다.

### execCommand() 문법

- `document.execCommand("명령이름", false, "값")`

<br>

### execCommand() 명령어 종류

____

- `execCommand()`는 기본 선택되어 있는 영역의 스타일을 변경한다.

- `bold` : 글자 굵게, 매개변수 - true

- `fontName` : 글꼴 변경, 매개변수로 글꼴 이름을 넘겨야함

- `fontSize` : 글자 크기 변경, 매개변수로 글자 사이즈를 넘겨야함(1~7)

- `foreColor` : 글자 색 변경, 매개변수로 글자 색(RGB 값)을 넘겨야함

- `hiliteColor` : 글자 배경색 변경, 매개변수로 글자 색(RGB 값)을 넘겨야함

- `italic` : 글자 기울임, 매개변수 - true

- `justifyCenter` : 가운데 정렬, 매개변수 - true

- `justifyLeft` : 왼쪽 정렬, 매개변수 - true

- `justifyRight` : 오른쪽 정렬, 매개변수 - true

- `selectAll` : 편집기 전체 선택, 매개변수 - true

- `underline` : 밑줄, 매개변수 - true

- `styleWithCSS` : 마크업에서 style 속성을 수정할때 사용, 매개변수로 true 지정

- [execCommand() API 문서 참고](https://developer.mozilla.org/ko/docs/Web/API/Document/execCommand)

<br>

### jQuery 소스코드

_____

<pre><code class="html" style="font-size:14px"><script>

  document.execCommand('styleWithCSS', false, true);

  document.execCommand('insertBrOnReturn', false, true);

  $(document).ready(function() {

    $("#text").focus();

    $('button').click(function(){

      document.execCommand($(this).attr('id'), false, true);

    });

    $('#bold').click(function() {

    document.execCommand('bold', false, true);

    });

    $('#selectAll').click(function() {

    document.execCommand('selectAll', false, true);

    });

    $('#italic').click(function() {

       document.execCommand('italic', false, true);

    });

    $("#underLine").click(function() {

       document.execCommand('underLine', false, true);

    });

    $("#justifyLeft").click(function() {

       document.execCommand('justifyLeft', false);

    });

    $("#justifyRight").click(function() {

       document.execCommand('justifyRight', false);

    });

    $("#justifyCenter").click(function() {

       document.execCommand('justifyCenter', false);

    }); 

    $('select').change(function(){

      document.execCommand($(this).attr('id'), false, $(this).val());

    });

    $("#foreColor").change(function(){ 

       document.execCommand('foreColor', false, $(this).val());

    });

    $("#hiliteColor").change(function(){

       document.execCommand('hiliteColor', false, $(this).val());

    });

    $("#fontName").change(function(){

       document.execCommand('fontName', false, $(this).val());

    });

    $("#fontSize").change(function(){

       document.execCommand('fontSize', false, $(this).val());

    });

    

  });

</script>

</code></pre>

<br>

### jQuery 소스코드 최적화

____

- 해당 버튼, select box의 ID에 명령어와 같은 이름을 주게 되면 ID 값을 읽어 명령어를 호출 할 수 있다.

- 아래와 같은 짧은 코드로 편집에 필요한 각 기능을 수행할 수 있다.


<pre><code class="html" style="font-size:14px">$('button').click(function(){

document.execCommand($(this).attr('id'), false, true);

});

$('select').change(function(){

document.execCommand($(this).attr('id'), false, $(this).val());

});

</code></pre>

<br>

### 전체 소스코드

____

- Github - [https://github.com/KSLEE7746/TextEditor/blob/master/TextEditor.html](https://github.com/KSLEE7746/TextEditor/blob/master/TextEditor.html)