Javascript

prompt에 이름을 입력받아 문서에 이름 표시하기(innerText 메서드)

breeghty 2022. 10. 24. 02:05

intro.

자바스크립트를 이용하여 문서에 이름을 표시하는 방법은 여러가지가 있다. 우리가 아는 가장 단순한 방식은 이런 것이다. 

<body>
        <script>
            let name = prompt("이름을 입력하세요!","");
            document.write(`${name}님 환영합니다!`);
        </script>
</body>

자바스크립트의 document.write()를 사용하는 것이다. document.wrtie()메소드를 사용하면 할당받은 변수나 문자열, 숫자 등을 브라우저에 표시할 수 있다. 하지만 여기서 생기는 의문점. html 문서가 이미 존재하는데 입력받은 사용자에 따라 문서에 표시되는 내용을 다르게 바꾸고 싶다면 어떨까? 예를 들면 이런 상황이다.

 

<body>
    <div class="test">
        <h3>환영합니다 guest님</h3>
    </div>
</body>

이 코드를 입력하면 브라우저에 위와 같이 나타난다. 해당 화면을 매번 다른 사용자가 열람하고, 열람할 때마다 사용자의 다른 이름을 입력받아 "환영합니다 000님"이라고 표시할 수 있는 방법에 대해 알아보려고 한다. 

 

* 문제상황: javascript prompt()를 이용해서 이름을 입력받고 html 문서에 있는 <h3> 태그 안의 '알 수 없는 사용자'를 실제 문서를 열람하는 사람의 이름으로 바꾸고 싶음.


이 문제를 해결하기 위해 우리가 알아야 할 것은 세가지이다.

 

01. $(document).ready(function(){ ...... });

 

(제이쿼리 CDN 사용방법에 대해서는 여기서 따로 설명하지 않겠다.) ready()메서드는 '사용자가 사이트를 방문할 때' 요청한 HTML 문서 객체의 로딩이 끝나면 이벤트를 발생시킨다. 쉽게 말하자면 HTML 문서를 불러들인 다음 이 함수를 실행시키겠다는 의미이다.

 

- 표현방법

$(document).ready(function(){ .... });

$(document).on("ready", function() {.......});

{}안에는 자바스크립트 코드를 입력하면 된다.

 

02. document.getElementById("id");

 

Document.getElementById() 메서드는 주어진 문자열과 일치하는 id 속성을 가진 요소를 찾고, 이를 나타내는 Element 객체를 반환합니다. ID는 문서 내에서 유일해야 하기 때문에 특정 요소를 빠르게 찾을 때 유용합니다. (출처: https://developer.mozilla.org/ko/docs/Web/API/Document/getElementById)

 

* 이 메서드를 사용할 때 주의할 점.

-  보통 제이쿼리를 사용시 선택자를 입력할 때 클래스의 경우 $(".className")으로, 아이디의 경우 $("#idName")으로 선택하나 getElementById는 문서에서 유일한 id를 찾는 메서드이므로, #를 적어줄 필요가 없다.

- 만약 클래스와 아이디를 모두 구분없이 선택하고 싶다면 Document.querySelector()를 사용하면 된다.

 

<body>
    <div class="test">
        <h3>환영합니다  <span id="name">guest</span>님</h3>
    </div>
    <script>
        $(document).ready(function(){
            let name = prompt("이름을 입력하세요.");
            //'사용자1'이라고 입력
            //문자열로 이름을 입력받음
            if(name){
            //if(true) 이름을 입력받은 경우 실행되는 코드
                const showName = document.getElementById("name");
                //id = "name"인 객체, 곧 <span>의 객체를 반환받는다.
                console.log(showName);
                //<span id="name">guest</span>가 반환된다.
            }
        })
    </script>
</body>

 

03. innerText()

 

위 코드에서 console.log(showName);을 입력하니 <span id ="name">guest</span>이라고 반환되었다. 입력받은 이름을 name이라는 변수에 할당하기만 했지, 할당된 이름을 <span>태그의 내용으로 바꾸지 않았기 때문이다. 'guest'라는 문자열을 입력받은 '사용자1'로 바꾸기 위해서는 innerText method를 사용해주면 된다.

 const showName = document.getElementById("name");
 //showName => <span id="name">guest</span>
showName.innerText = `${name}`;
//showName의 내용을 입력받은 name 변수 '사용자1'로 바꾼다.

 


결과

 

<body>
    <div class="test">
        <h3>환영합니다  <span id="name">guest</span>님</h3>
    </div>
    <script>
        $('.test').hide();
        $(document).ready(function(){
            let name = prompt("이름을 입력하세요.");
            if(name){
                const showName = document.getElementById("name");
                console.log(showName);
                showName.innerText = `${name}`;

            }
            $('.test').show();
        })
    </script>
</body>

이렇게 하면 입력받은 name값이 문서에 표시된다.
 
여기서 다루지 않은 querySelector(), show(), hide()에 대해서는 다음 기회에 다뤄보도록 하겠다.