【发布时间】:2018-07-13 05:33:45
【问题描述】:
我正在尝试学习如何使用 Javascript 制作动态菜单。
onload,程序会根据页面中的h2标题创建一个菜单。
如果 body 标签有一个 id = homePage,菜单将插入页面顶部,否则它将插入页面侧面。
它一直在工作,直到我在内容周围添加了一个 DIV 包装器(id = wrapper)。然后它停止工作。
错误:未捕获的 DOMException:无法在 'Node' 上执行 'insertBefore':要插入新节点的节点不是该节点的子节点。
我认为这是因为我的 if/else 语句将错误的元素定位为父元素。但我不知道如何使用 id = 包装器定位 DIV,并在该元素 firstChild 之前插入菜单。
我被困住了!
如果我将 DIV id=wrapper 注释掉,那么它可以工作。
HTML:
<body id ='notHomePage'>
<!--<div id='wrapper'>-->
<h1>Heading 1</h1>
<h2>H2 Heading - 1</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam fermentum ullamcorper
</p>
<h2>H2 Heading - 2</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam fermentum ullamcorper
</p>
<h2>H2 Heading - 3</h2>
<p>
Lorem ipsum dolor sit amet, consectetur
</p>
<!-- </div> -->
</body>
JS:
if(pageIs == 'homePage'){
//IF is homePage then load menu at top
document.body.insertBefore(makeMenuDiv(), document.body.firstChild);
} else {
//ELSE load SIDE NAV
document.body.insertBefore(makeSideNav(), document.body.firstChild);
}//END IF
代码: Codepen
【问题讨论】:
-
只为我打印
"notHomePage"。没有错误。 -
我推荐你使用 Vue、React 或 Angular 来构建动态 html
-
@LucasMarques 在不知道 OP 实际需要什么的情况下,这不是随便给出的建议。如果没有令人信服的理由,您不会将库扔给问题。
-
@LucasMarques:说真的,不。没有必要在任何事情上都扔图书馆。如今,创建动态内容绝对是微不足道的。
-
menu.setAttribute("id", "#mainMenu");为什么ID有#?无论哪种方式,设置属性都更清洁。menu.id = "mainMenu"
标签: javascript html dom