2. DOM ์‘์šฉ

0

DOM

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

ํŠธ์œ„ํ„ฐ ๋Œ“๊ธ€์ฐฝ ๋งŒ๋“ค๊ธฐ

๐Ÿ’ป ์‹ ๊ทœ ๋Œ“๊ธ€ ์ถ”๊ฐ€ ์†Œ์Šค

document.querySelector('#type3').onclick = addNewComment; //๋ฒ„ํŠผํด๋ฆญ์‹œ addNewCommentํ•จ์ˆ˜์‹คํ–‰
//์ƒˆ๋กœ์šด ๋Œ“๊ธ€ ์ถ”๊ฐ€ ํ•จ์ˆ˜ 
function addNewComment() {
  getTimeStamp(){
  	//๋‚ ์งœ ์ •๋ ฌํ•˜๋Š” ํ•จ์ˆ˜ ์ƒ๋žต
  }
  let name = document.getElementById('type1').value; //์‹ ๊ทœ์œ ์ €์ด๋ฆ„
  let comment = document.getElementById('type2').value; //์‹ ๊ทœ๋Œ“๊ธ€๋‚ด์šฉ
  //1. ์ƒˆ ์—˜๋ฆฌ๋จผํŠธ li ๋งŒ๋“ ๋‹ค
  let li = document.createElement('LI');
  //2.li์— ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. 
  li.innerHTML = '<div class="reple"><div class="name">' + name + '</div><div class="date">' + getTimeStamp() + '</div><br><div class="comment">' + comment + '</div></div><hr>';
  //3.์‚ฝ์ž…ํ• ๋ ค๋Š” ๋ถ€๋ชจ์—˜๋ฆฌ๋จผํŠธ ์„ ํƒํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
  let parent = document.querySelector('#ulp');
  //4.๋ถ€๋ชจ์—˜๋ฆฌ๋จผํŠธ์— li์ถ”๊ฐ€ํ•˜๊ธฐ
  parent.prepend(li);
  }
}

-> ์—ฌ๊ธฐ์„œ๋Š” innerHTML์„ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘์ ์œผ๋กœ ํƒœ๊ทธ๋ฅผ ๋„ฃ์—ˆ๋‹ค. ๋ณด์•ˆ์ƒ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ™œ์šฉ์„ ์œ„ํ•ด ์—ฐ์Šต์‚ผ์•„ ๋„ฃ์—ˆ๋‹ค.

๐Ÿ’ป ๋Œ“๊ธ€ ์ •๋ ฌํ•˜๊ธฐ + ๊ธฐ๋ณธ ๊ฐ์ฒด์— ์ €์žฅ๋œ ๋Œ“๊ธ€ ๋ณด์—ฌ์ฃผ๊ธฐ

//๋Œ“๊ธ€์—ฌ๋Ÿฌ๊ฐœ๋ณด์—ฌ์ฃผ๊ธฐ
function renderTwits() {
  DATA.forEach(renderTwit); //DATA.forEach()๋‚ด์šฉ์„์ˆœํšŒํ•จ 
}
//li HTMl์„ ul์— ๋‹ด์•„์ฃผ๊ธฐ 
function renderTwit(comment) {
  let commentElement = makeCommentElement(comment);
  let ul = document.querySelector("#ulp");
  ul.appendChild(commentElement);
}
//HTML ๋งŒ๋“ค์–ด์ฃผ๊ธฐ
function makeCommentElement(comment) {
  let liElement = document.createElement('li');
  let div_reple = document.createElement('div');
  div_reple.classList.add('reple');
  let div_name = document.createElement('div');
  div_name.classList.add('name');
  div_name.textContent = comment.user;
  div_name.onclick = addSameList; //์ด๋ฆ„์„ ํด๋ฆญํ•˜๋ฉด ๊ฐ™์€ ์ด๋ฆ„์ฐพ๊ธฐ ํ•จ์ˆ˜ ์‹คํ–‰
  let div_date = document.createElement('div');
  div_date.classList.add('date');
  div_date.textContent = comment.created_at;
  let br = document.createElement('br');
  let div_comment = document.createElement('div');
  div_comment.classList.add('comment');
  div_comment.textContent = comment.message;
  let line = document.createElement('hr');
  div_reple.appendChild(div_name);
  div_reple.appendChild(div_date);
  div_reple.appendChild(br);
  div_reple.appendChild(div_comment);
  liElement.appendChild(div_reple)
  liElement.appendChild(line);
  return liElement;
}

-> ํ•จ์ˆ˜3๊ฐœ๋ฅผ ์ž‘์„ฑ ํ•˜์˜€๋‹ค.
1๋ฒˆ์งธ - renderTwits()
DATA๋ผ๋Š” ๊ฐ์ฒด์—์„œ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ ์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” .forEach๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DATA๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™”๋‹ค. DATA์˜ ๋‚ด์šฉ์ด rederTwitํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ‹€์•ˆ์— ์ •๋ฆฌ๊ฐ€ ๋˜์„œ ๋‚˜์˜จ๋‹ค.
2๋ฒˆ์งธ - renderTwit()
li๋ฅผ ul์•ˆ์— ๋‹ด์•„์ฃผ๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜์ด๋‹ค.
3๋ฒˆ์งธ - makeCommentElement()
๋Œ“๊ธ€์„ ์ •๋ฆฌํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด li์•ˆ์— html์„ dom์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“  ํ•จ์ˆ˜์ด๋‹ค.

<li>
    <div class="reple">
      <div class="name">์ด๋ฆ„</div>
      <div class="date">๋‚ ์งœ</div><br>
      <div class="comment">๋Œ“๊ธ€๋‚ด์šฉ</div>
    </div>
    <hr>
</li>

์œ„์— html์„ ๋งŒ๋“ ๊ฒƒ์ด๋‹ค.
div_name.onclick = addSameList; ์ด๊ฒƒ์€ ์ด๋ฆ„์„ ํด๋ฆญํ•˜๋ฉด addSameListํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

๐Ÿ’ป ์ด๋ฆ„ ํด๋ฆญ์‹œ ๊ทธ ์‚ฌ๋žŒ์ด ์“ด ๋Œ“๊ธ€๋งŒ ๋ณด์—ฌ์ฃผ๊ธฐ

//!!!!์ž‘์„ฑ์ž ํด๋ฆญ์‹œ ์“ด๋Œ“๊ธ€ ๋‹ค ๋ณด์—ฌ์ฃผ๊ธฐ 
function addSameList() {
  let filteredData = []; //๋นˆ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์คŒ 
  let ul = document.querySelector("#ulp");
  //๊ธฐ์กด ๋‚ด์šฉ ๋‹ค ์ง€์›€ 
  while (ul.firstChild) {
    ul.removeChild(ul.firstChild);
  }
  //๊ฐ™์€ ์ด๋ฆ„ ์ธ๊ฑฐ ์ฐพ๊ธฐ
  for (let i = 0; i < DATA.length; i++) {
    if (event.target.textContent === DATA[i].user) {
      filteredData.push(DATA[i]);//์ด๋ฆ„์ด ๊ฐ™์œผ๋ฉด ๋นˆ ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๊ธฐ
    }
  }
  //ul์— ์ƒˆ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด ๋„ฃ์–ด์ฃผ๊ธฐ
  for (let j = 0; j < filteredData.length; j++) {
    ul.appendChild(makeCommentElement(filteredData[j]));
  }
}

-> ๋จผ์ € ๊ธฐ์กด์— ul์•ˆ์— ๋‚ด์šฉ์„ ๋‹ค ์ง€์›Œ์ค€๋‹ค.

while (ul.firstChild) {
    ul.removeChild(ul.firstChild);
  }
ul์˜ ์ฒซ๋ฒˆ์งธ ์ž์‹ ๊นŒ์ง€ ๋‹ค ์ง€์šธ๋•Œ ๊นŒ์ง€ while๋ฌธ์„ ๋Œ๋ ค ์ „์ฒด ์‚ญ์ œ๋ฅผ ํ•˜๋Š”๊ฒƒ์ด๋‹ค. 

์‚ญ์ œํ›„ DATA์˜ ๊ฐ์ฒด ๊ธธ์ด ๋งŒํผ ์ˆœํšŒํ•˜๋ฉด์„œ ํด๋ฆญํ–ˆ๋˜ ์ด๋ฆ„(event.target.textContent)๊ณผ DATA[I].user๋ฅผ ๋น„๊ตํ•œ๋‹ค.
๋น„๊ตํ•˜์—ฌ ๊ฐ™์œผ๋ฉด ๋นˆ๋ฐฐ์—ด์— ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

๐Ÿ’ป ๋žœ๋ค๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๋žœ๋ค์œผ๋กœ ๋Œ“๊ธ€ ๋ณด์—ฌ์ฃผ๊ธฐ

//๋žœ๋ค์œผ๋กœ ๋Œ“๊ธ€ ์ƒˆ๋กœ ๋“ฑ๋กํ•˜๊ธฐ
function renderRandomTwit() {
  let refreshComment = makeCommentElement(generateNewTweet());
  let ul = document.querySelector("#ulp");
  ul.prepend(refreshComment);
  DATA.push(generateNewTweet()); //DATA ๊ฐ์ฒด์— ๋žœ๋ค๊ฐ’ ๋„ฃ๊ธฐ
}
document.querySelector('#newbutton').onclick = renderRandomTwit; //๋žœ๋ค๋ฒ„ํŠผ ํด๋ฆญ์‹œ

-> ul์— ๋žœ๋ค๊ฐ’ ๋‹ด์•„์„œ ์ •๋ ฅํ•˜๊ณ  DATA์•ˆ์—๋„ ๋‹ด๋Š”๋‹ค.(๊ฐ™์€์ด๋ฆ„ํด๋ฆญ์‹œ ๋ณด์—ฌ์ค˜์•ผํ•˜๊ธฐ์—)

profile
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ปํ•ญ์ƒ๋ฐœ์ „ํ•˜์ž ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€