개인공부

[기본기 다지기] '글자수 세기' 만들기_HTML,CSS,JS_수정완료!

chsua 2023. 1. 17. 21:24

이전에 HTML 지식이 부족해서 '글자수 세기' 프로그램을 미완했다.

 

이전 코드도 작동이 되기는 하는데,

한 줄로 입력이 되고 줄 바꿈이 인식되지 않았다.

 

HTML element를 찾아보고 정리한 후 수정을 했다.

문제가 되었던 부분은 'input'이었는데,

여러줄을 입력할 수 있는 'textarea'로 수정하니 작동이 잘 되었다.

 

그리고 이전에는 줄바꿈이 되지 않아서 몰랐던 문제인데

JS에서 띄어쓰기를 포함하여 숫자를 세는 경우 '\n'도 인식이 되어서

잘못된 결과가 출력되었다.

해서, 이 부분도 수정했다. 

 


 

최종 코드는 다음과 같다.

 

1. 출력화면

 

2. HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="./css-test.css"/>
    <meta name="viewport" content="width=device-width">
    <title>Cool box</title>
  </head>

  <body>
    
    <h1>글자수 세기 프로그램</h1>

    <p>하단에 글을 입력해주세요.</p>

    <div class="userInput">
    
    	<!-- 수정한 부분 -->
        <textarea required id="inputText" class="inputText"></textarea>
        
        
        <br>
        <div class="button">
            <button type="submit" class="submit_notSpacing">띄어쓰기 없이 처리</button>
            <button type="submit" class="submit_spacing">띄어쓰기 포함하여 처리</button>
        </div>
    </div>

    <div class="resultParas">
      <p class="showResult"></p>
    </div>

    <script src="index.js"></script>
    </body>
</html>

 

3. CSS

html {
  font-family: sans-serif;
}

body {
  padding: 5%;
  width: 50%;
  max-width: 800px;
  min-width: 500px;
  margin: 10px auto;
}

label {
  font-size: smaller;
  color: rgb(71, 71, 71)
}

.inputText {
  width: 100%;
  min-height: 300px;
  max-height: 1000px;
  overflow: auto;
}


button {
  border-radius: 1px;
  background-color: bisque;
  width: 150px;
  height: 50px;
}



.button {
  margin: 3%;
  display:  flex;
  justify-content: space-around;
}

 

4. JS

const submit_notSpacing = document.querySelector(".submit_notSpacing");
const submit_spacing = document.querySelector(".submit_spacing");
const showResult = document.querySelector(".showResult");

function count(spacing) {
    const inputText = document.querySelector(".inputText");
    let userText = inputText.value;
    let result = 0;

    if (!spacing) {
        const val = userText.split("");
        val.forEach(ele => {
            if (ele !== "\n" && ele !== " ") result++
        });
        showResult.textContent = `띄어쓰기 미포함: ${result}자`;
        return;
    }

    const val = userText.split("");
    
    // 수정한 부분
    val.forEach(ele => {
        if (ele !== "\n") result++
    });
    
    
    showResult.textContent = `띄어쓰기 포함: ${result}자`;
    return;
}

submit_notSpacing.onclick = () => {  //띄어쓰기 없는 처리
    count(false);
}
submit_spacing.onclick = () => {
    count(true);
}