代码之家  ›  专栏  ›  技术社区  ›  Jonno_FTW

InnerHTML未写入文档

  •  0
  • Jonno_FTW  · 技术社区  · 17 年前

    这是一个简单的网页分配。 我有几页希望在侧边栏中显示相同的链接列表,因此生成了以下javascript:

    document.getElementByid('list').innerHTML = '<a href=\"index.html\">Main Page</a>'+
    '<a href=\"benefits.html\">Benefits</a>'+
    '<a href=\"facts.html\">Shocking Statistics</a>'+
    '<a href=\"links.html\">Resources</a>';
    

    然后我用以下方法将它添加到页面顶部:

    <head>
    <script type="text/javascript" src="./script/links.js"></script>
    </head>
    ...
    <div id="list">
    </div>
    

    但问题是,链接没有出现,我担心我可能不得不重新使用太多的链接。 document.write 线。

    6 回复  |  直到 13 年前
        1
  •  3
  •   Quentin    17 年前

    脚本在加载时运行。由于脚本出现在您试图编辑的DIV元素之前(并且由于您没有采取任何措施延迟脚本的执行),document.getElementByID将返回空值,脚本将出错。

    将脚本移到前面 </body> .

    此外,该方法是 getElementById 不 getElementByid .

    也就是说,依靠javascript添加基本导航是一个糟糕的主意。你最好使用 pre-processor or server side solution .

        2
  •  4
  •   Mayo    17 年前

    我一直这样做…

    getElementByid
    

    应该是

    getElementById
    

    编辑:我的错误是用大写…GETelEnMyByID。

        3
  •  2
  •   T.J. Crowder    17 年前

    问题是,您试图按ID访问一个还不存在的元素。您的脚本将在它包含的位置执行。您需要等待,直到文档被解析并且DOM树已经准备好。你可以用窗户 load 事件,或者如果您正在使用任何类型的javascript工具箱,比如原型或jquery,它们通常会提供更早发生的事情(因为 window.load 仅在加载所有图像后发生)。

    编辑:当然,正如其他人所说,你有错别字,这是 getElementById .

        4
  •  0
  •   Dónal Boyle    17 年前

    您需要在加载主体之后调用javascript,以便您所引用的元素已经初始化。为此,您应该将代码放入函数中。例如

    函数buildNav()。{ …… }

    然后在您的身体标签上,使用onload事件:

    <body onload="buildNav()">

    这样,在主体加载完成之前,JavaScript将不会运行。

        5
  •  0
  •   Tim Down    17 年前

    由于文档 <div> 您尝试检索的元素可能尚未出现在文档中。如果您走这条路线,您需要在加载文档后调用innerhtml文件。

    没有什么问题 document.write 在这里。如果您真的需要使用javascript动态地编写内容,请使用 文档.write 将避免混淆加载事件处理程序,并使内容在加载后立即显示,而不是明显更改文档。

        6
  •  0
  •   bobince    17 年前

    除了_id_资本化和加载顺序之外:通常情况下,让重要的网页内容(如导航链接)依赖于javascript是一个非常糟糕的主意。

    这会给你带来可访问性问题,意味着搜索引擎会忽略你的所有链接。仅仅为了保存复制和粘贴几个<A>标签,这不是一个很好的交易。

    对于复制公共页面元素,请看基于服务器的页面处理技术,其中最简单的是 SSI .