2016-12-03 1 views
0

removeChild 메서드에 문제가 있습니다. 브라우저가 저에게 타입 에러를줍니다. 창 폭이 1920px 때 나는 그것을 테스트하고 있습니다부모로부터의 호출에도 불구하고 removeChild가 작동하지 않음

<header> 
    <div id="header-div"> 
     <img id="logo-image" src="img.jpg" alt="image"> 
    </div> 
    <div class="mobile-hamburger"> 
     <a href="#menu" class="box-shadow-menu">text</a> 
    </div> 
</header> 

JS

var windowWidth = parseInt(window.innerWidth); 

if (windowWidth >= 700) { 

let headerTag = document.getElementsByTagName("header"); 
let hamburgerMenu = document.getElementsByClassName("mobile-hamburger"); 

hamburgerMenu.headerTag.removeChild(hamburgerMenu); 

} 

HTML :

여기 내 코드입니다. 디버깅 툴에서 브라우저가 <header> 태그와 <div>"mobile-hamburger" 클래스로 잡는 것을 볼 수 있습니다. 그래서 그들은 괜찮습니다.

여기에 removeChild 행의 문제점을 찾을 수 없습니다. 부모에게 전화 한 후 요소를 제거합니다. 객체와 같은 배열입니다 https://jsfiddle.net/u3r9m5f0/

+0

getElementsByClassName'는 콜렉션을 반환합니다. 루프를 사용하십시오. –

+0

'hamburgerMenu.headerTag'로 당신이 무엇을 원하는지 확신 할 수 없습니다. 'headerTag'는 변수이며, 이는 또한 컬렉션이고'hamburgerMenu' 콜렉션과 관련이 없습니다. –

+0

참고로, JS를이 기능에 사용하는 이유는 없습니다. 간단한 CSS에서만 JS를 사용할 수 있습니다. – junkfoodjunkie

답변

0

document.getElementsByTagNamedocument.getElementsByClassName 반환 노드 목록 :

다음은이 코드를 사용하여 jsfiddle입니다. 첫 번째 색인에서 요소를 가져와야합니다.

는 또한 잘못된 parent.removeChild(child)에 대한 배열 심지어 하나 개의 요소가 있으므로 (이 경우 유일한)

같은 첫 번째 항목을 선택 getElementsByClassName[0] 를 사용하여 포함

var windowWidth = parseInt(window.innerWidth); 

if (windowWidth >= 700) { 

    let headerTag = document.getElementsByTagName("header")[0]; 
    let hamburgerMenu = document.getElementsByClassName("mobile-hamburger")[0]; 

    headerTag.removeChild(hamburgerMenu); 

} 
+0

예,이게 전부입니다! 정말 고맙습니다! 잠에 가야합니다 ... – Eorekan

+0

@ Eorekan : 첫 번째 요소 만 원하면'querySelector'를 사용할 수 있습니다. 자식으로부터'.parentNode'를 사용할 수 있기 때문에 부모를 따로 따로 가져올 필요가 없습니다. 'var hm = document.querySelector (". mobile-hamburger"); hm.parentNode.removeChild (hm);' –

0

getElementsByClassName 반환하는 구문이 에 적용됩니다 getElementsbyTagName

관련 문제