javascript - 为什么这个脚本只能在主 HTML 文件中工作?
问题描述
我有一个 JS 菜单生成器,它仅在包含在主 html文件中时才有效,并且在外部文件中无效。我尝试了几个作者的 JS 自动菜单变体,它们都表现出相同的行为。
我已经尝试了之前适用答案中的所有建议,例如将脚本文件请求放在其他位置,例如“div id = submenu”之前或html文件的末尾。外部文件位于同一目录中并且是正确的名称。我仔细检查了愚蠢的错误。没运气!
更新
在尝试了未知的事物组合后,我让脚本正常工作,但我不知道是什么导致了问题,也不知道我到底做了什么来解决这个问题。问题似乎不止一个。
有一段时间,脚本在不包含 .. 的情况下还有其他问题,然后我注意到它已经改变,当我删除 .. 时,我得到了完整的功能。
我希望我可以将其传递给其他人,我几乎怀疑我所做的互联网剪切和粘贴的隐藏角色。但是,我在其他作者的类似功能上遇到了同样的问题,而且我以前从未遇到过剪切和粘贴问题。(没想到要开启Notepad++的隐藏字符功能。)感谢帮助!
有几个关于 js 不能从外部文件工作的问题...
JS 时钟不工作
为什么这个脚本不能在外部 js 文件中工作?
javascript 在外部文件中不起作用
,这些似乎都不能解决我遇到的问题。
这似乎是我理解的 JS 的一个重要部分,我对 JS 不是很熟悉,所以请不要回答:)
主 HTML 文件
<!DOCTYPE HTML>
<head>
<title>Title</title>
</head>
<body style="margin: 50px auto; width:1000px;">
<div id="submenu">building menu...</div>
<h1>This is H1</h1>
<h2>This is H2 one</h2>
<h2>This is H2 two</h2>
<h3>This is H3</h3>
<h4>This is H4</h4>
<!-- script include moved as suggested -->
<script type="text/javascript" src="main.js"></script>
</body>
</html>
外部“main.js 脚本文件”
// script tags removed <script type="text/javascript">
// Original JavaScript code by Chirp Internet: www.chirp.com.au
// Please acknowledge use of this code by including this header.
var buildMenu = function(targetId, headingTag) {
var target = document.getElementById(targetId);
var headings = document.getElementsByTagName(headingTag || "h2");
if(headings.length > 1) {
// construct an ordered list of links
var menuList = document.createElement("OL");
for(var i=0; i < headings.length; i++) {
var anchorName = "";
if(headings[i].id) {
anchorName = headings[i].id;
} else {
anchorName = "section_" + i;
headings[i].setAttribute("id", anchorName);
}
var headingText = headings[i].firstChild.nodeValue
headings[i].firstChild.nodeValue = (i+1) + ". " + headingText;
var menuLink = document.createElement("A");
menuLink.setAttribute("href", "#" + anchorName);
menuLink.appendChild(document.createTextNode(headingText));
var listItem = document.createElement("LI");
listItem.appendChild(menuLink);
menuList.appendChild(listItem);
}
// remove all nodes from inside target element
while(target.hasChildNodes()) target.removeChild(target.firstChild);
// insert our generated menu into the target element
target.appendChild(menuList);
} else {
// remove the target element from the DOM
target.parentNode.removeChild(target);
}
};
if(document.addEventListener) {
document.addEventListener("DOMContentLoaded", function() {
buildMenu("submenu", "h2");
}, false);
} else {
window.attachEvent("onload", function() {
buildMenu("submenu", "h2");
});
}
// removed </script>
解决方案
推荐阅读
- javascript - 如何让 javascript 弹出窗口将我发送到 .cshtml 页面?
- python - 我把自己和验证弄糊涂了。我正在尝试创建登录/注册功能,但发现很难验证我的数据库的登录详细信息
- c# - WPF UserControl DependencyProperty 在单击事件中为空,但在绑定中没有
- c# - 转换列表
列出 - python-3.x - 如何在 Python 中使用 Tkinter 制作交互式标签
- sql - 当在 1 列中重复时,获取具有最高值的行
- javascript - 在绘图中的 ColumnDataSource 更改时触发 JavaScript 回调
- ios - 获取“锁定方向”,也称为“视图方向”
- unit-testing - ABAP 单元测试仅在生成后才被检测/可执行。如何使测试类可见?
- javascript - 查找所选选项的最快方法