在JavaScript中创建的表不';t显示;控制台中没有错误?
我正在学习JavaScript,并进入了书中描述创建新DOM元素(如表、行和列)的部分,因此我想创建一个类似元素周期表的表,稍后在学习新事物时可以返回并处理该表。我的问题是,从目前为止我所了解的一切来看,这段代码应该可以工作。除了它没有显示任何内容,FireFox v29.0的控制台中也没有显示任何内容 理想情况下,我希望创建7行(周期)和18列(组),然后显示表中这些位置关联的元素,然后尝试格式化它(例如,元素1和18之间插入了空单元格,因为该周期中唯一的元素是氢(1)和氦(2)。这方面的一个例子如下: 然而,我的第一个任务(创建一个基本表)似乎不起作用,要么我使用了错误的术语,要么以前没有人发布过这个(而“javascript元素周期表”的链接主要是类似的东西)。关于我这里缺少的东西,有什么想法吗在JavaScript中创建的表不';t显示;控制台中没有错误?,javascript,html,Javascript,Html,我正在学习JavaScript,并进入了书中描述创建新DOM元素(如表、行和列)的部分,因此我想创建一个类似元素周期表的表,稍后在学习新事物时可以返回并处理该表。我的问题是,从目前为止我所了解的一切来看,这段代码应该可以工作。除了它没有显示任何内容,FireFox v29.0的控制台中也没有显示任何内容 理想情况下,我希望创建7行(周期)和18列(组),然后显示表中这些位置关联的元素,然后尝试格式化它(例如,元素1和18之间插入了空单元格,因为该周期中唯一的元素是氢(1)和氦(2)。这方面的一个
<html>
<head>
<title>Periodic Table</title>
</head>
<body>
<script>
var periodicTable = createTable( 7, 18);
var period = 7;
var group = 18;
document.body.appendChild(periodicTable);
function createTable( period, group ) {
var elementId = 0;
var table = document.createElement('table');
for (var p = 1; p < period; ++p) {
var tr = table.appendChild(document.createElement('tr'));
for (var g = 1; g < group; ++g) {
var element = tr.appendChild(document.createElement('td'));
element.innerHTML = ++elementId;
}
}
return table;
}
</script>
</html>
元素周期表
var periodicTable=createTable(7,18);
var周期=7;
var组=18;
文件.正文.附件(周期性);
函数createTable(期间、组){
var-elementId=0;
var table=document.createElement('table');
对于(var p=1;p
编辑
基于以下有用的注释,我将代码更改为如下所示:
<script>
var periodicTable = createTable( 7, 18);
document.body.appendChild(periodicTable);
function createTable( period, group ) {
var elementId = 0;
var table = document.createElement('table');
for (var p = 1; p < period; ++p) {
var tr = table.appendChild(document.createElement('tr'));
for (var g = 1; g < group; ++g) {
var element = tr.appendChild(document.createElement('td'));
element.innerHTML = ++elementId;
}
}
return table;
}
</script>
var periodicTable=createTable(7,18);
文件.正文.附件(周期性);
函数createTable(期间、组){
var-elementId=0;
var table=document.createElement('table');
对于(var p=1;p
在原始代码中,您有以下内容:
var periodicTable = createTable( 7, 18);
var period = 7;
var group = 18;
document.body.appendChild(periodicTable);
function createTable( rows, cols ) {
:
for (var p = 1; p < period; ++p) {
var tr = table.appendChild(document.createElement('tr'));
for (var g = 1; g < group; ++g) {...}
}
return table;
}
var periodicTable=createTable(7,18);
var周期=7;
var组=18;
文件.正文.附件(周期性);
函数createTable(行、列){
:
对于(var p=1;p
思想被提升,即变量在作用域的开始处声明,它们没有初始化,在满足赋值的地方赋值。在代码期间
和组
中,在执行createTable
之后,在它们被给定值之前,有值未定义
您将两个参数传递给createTable()
,其中它们的名称是行
和列
。但是,当您需要这些值时,可以使用全局变量期间
和组
,它们在执行函数时是未定义的(它们在函数完成后获得其值)
修复这一点,只需将参数“代码>行> <代码>和<代码> COLS > <代码> > <代码> >代码>组<代码>,并考虑删除全局变量(如果它们在其他地方不需要).为什么在createTable
中使用全局变量而不是传递的参数?这些全局变量在使用时是未定义的。@SalarianEngineer看起来您通过编辑修复了它,但请记住,您仍然可以将文本传递给函数(7,18)不要先将它们分配给变量。嗯……请不要根据评论或答案编辑你的帖子,如果你这样做,它们将变得无关紧要,未来的访问者可能会感到困惑。@Teemu好主意,我会回去编辑更改。谢谢你提出来!@Victor2748谢谢你的链接。我在搜索时没有看到这一点这里,但我想我使用的术语不正确。不过有一个问题:为什么getElementsByTagName()方法的末尾有[0]?var body=document.getElementsByTagName('body')[0];