일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- javascript 선택자
- 리눅스 마스터 공부 후기
- it책리뷰
- 한입에 쏙 파이썬
- appendChild 오류
- git 기본 명령어
- 리눅스 마스터2급 합격 후기
- 리눅스 마스터 자격증
- 보안입문
- JavaScrtip 선택
- JavaScript 공백
- createTextNode()
- sdk 33이상 권한
- sdk 33이상 갤러리 권한
- tmp_text
- 이것이 우분투 리눅스다
- Hello coding
- 파이썬 초보
- 리눅스마스터2급 합격
- JavaScript 버튼
- Jquery t선택자
- 리눅스 마스터 2급 후기
- 리눅스 마스터 2급2차
- sdk 33이상 갤러리 실행
- 칼리리눅스 해킹
- 리눅스 마스터2급
- 보안 책
- JavaScript
- appendChild()
- jQuery
- Today
- Total
엄살떠는 사람
appendChild is not a function 오류 본문
오늘 이야기 하고자 하는 것은
자바 스크립트에서 태그의 동적 생성에
사용되는 appendChild()에 관한 오류이다.
자 일단 코드를 보자 (필요 없는 것들은 다 배제했다)
<div class="comment-box">
<ul id="replies">
<div class='sial'>
<ui>댓글 번호 : </ui>
<ui class='replyId'></ui>
<ui>작성자 번호 : </ui>
<ui class='replyWriter'></ui>
<ui>작성 날짜 : </ui>
<input type="hidden" class="test" value='2'>
</div><hr/>
</ul>
</div>
<script>
chbuR();
function chbuR(){
var but = document.createTextNode('1번 버튼');
var bu = document.createElement('button');
bu.setAttribute("class", "ssssss");
bu.appendChild(but);
var dd = document.getElementsByClassName('sial');
dd.appendChild(bu);
}
function chbuL(){
var but = document.createTextNode('2번 버튼');
var bu = document.createElement('button');
bu.setAttribute('class', "ssssss");
bu.appendChild(but);
var dd = document.getElementsByClassName('sial');
dd.appendChild(bu);
}
</script>
자 우선 위의 코드는 아직 원하는 코드를 완성하지 못했다.
목표는 input 태그의 value값에 따라 다른 버튼 태그를 만드는 것이었다.
그러나 위의 코드를 실행시키면
위의 그림처럼 오류가 생긴다.
일단 많이 놀랐다. 왜냐하면 그럭저럭 많이 동적 생성과 appendChild()를 썼다고 생각했으니까....
어쨌든 해결을 위해 거의 모든 개발자들이 하는 구굴 링을 했다.
여러 stack overflow 페이지가 나왔지만 해결되지 않았다.
하지만 힌트? 비슷한 건 얻었는데 appendChild()는 DOM객체에서만 사용할 수 있다는 것이었다.
그렇다 하더라도 해결된 건 아니었기에 계속 검색하다가 stack overflow의 페이지 중 하나가 나왔다.
여러분들이 궁금해하는 해결방법이었다.
그건 바로
var dd = document.getElementsByClassName('sial')[0];
그렇다 인덱스 처리를 해주는 것이다. [0] 추가....
사실 이 문제를 해결하기 위해 4시간 정도 투자했는데 너무 허무했다....
솔직히 이유는 잘 모르겠다.
class를 이용한 선택자는 여러 개를 사용할 때만 저렇게 인댁스를 사용하는 줄 알았는데, 혼자 있을 때도 저렇게 해야 한다니.... 꼭 인덱스를 넣어줘야 한다는 걸 확인한 하루다...
그런데 jquery를 사용하면 인덱스를 넣지 않아도 됐었다. 아래 코드 참고
var bu = "<button type='button' name='ssssss'>1번 버튼입니다.</button>"
$('.sial').append(bu);
참고했던 페이지 : stackoverflow.com/questions/30443718/uncaught-typeerror-p-appendchild-is-not-a-function
Uncaught TypeError: p.appendChild is not a function
I'm taking a class on Ajax and this very simple script is throwing an error I don't understand. I keep getting an Uncaught Type Error saying that the appendChild method is not a function. The fun...
stackoverflow.com
요약.....
class를 사용할 때는 인덱스를 꼭 넣자.
'프로그래밍' 카테고리의 다른 글
jquery 요소 선택시 class 이름이 띄어쓰기 되어있는것 선택하기 (0) | 2022.10.29 |
---|---|
jquery css() 메서드로 적용하기 (0) | 2021.04.30 |
JavaScript button 태그에 글씨 넣기 (0) | 2021.04.02 |
JavaScript 에서 공백( ) 추가하는법 (0) | 2021.04.02 |
JavaScript랑 jquery 선택자 (0) | 2021.04.02 |