为什么我使用forEach来遍历压入表格内容会报错,而且现在这个只显示标题不显示内容?

来源:2-4 编程练习

Aurora_Meteor

2020-05-07 13:10:31

<!DOCTYPE html>

<html>


<head>

    <meta charset="UTF-8">

    <title>模版字符串</title>

</head>


<body>

    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>

    <script type="text/javascript">

        const tmpl = function() {

                return {

                    title: "前端",

                    data: [{

                        title: '布局基础',

                        date: ["html", "css"]

                    }, {

                        title: '网页特效',

                        date: ["javascript", "jquery"]

                    }, {

                        title: '框架',

                        date: ["bootstrap", "vue"]

                    }]

                }

            }

            // 补充代码

        const {

            title,

            listData

        } = tmpl();


        let arr = [];

        arr.push(`<caption>${title}</caption>`);


        for (let i in listData) {

            arr.push(

                `

                 <tr>

                    <td>${listData[i].title}</td>

                    <td>${listData[i].date[0]}</td>

                    <td>${listData[i].date[1]}</td>

                 </tr>

                `

            );

        };


        let table = document.createElement('table');


        table.innerHTML = arr.join('');


        document.body.appendChild(table);

    </script>

</body>


</html>

 for (let i in listData) {

            arr.push(

                `

                 <tr>

                    <td>${listData[i].title}</td>

                    <td>${listData[i].date[0]}</td>

                    <td>${listData[i].date[1]}</td>

                 </tr>

                `

            );

        };

换成

listData.forEach(function({

            title,

            date

        }) {

            arr.push(

                `

                 <tr>

                    <td>${title}</td>

                    <td>${date[0]}</td>

                    <td>${date[1]}</td>

                 </tr>

                `

            );

        });

会报错如下:

http://img.mukewang.com/climg/5eb39811090f5a8203650055.jpg

而且现在使用for in不报错了但是只能看到标题而且还是竖着的

http://img.mukewang.com/climg/5eb3983c09709b9c03610180.jpg

写回答

3回答

好帮手慕星星

2020-05-07

同学你好,是data数据没有获取到,循环遍历会有问题。

代码中listData与data不一致,所以没有获取到,参考修改:

http://img.mukewang.com/climg/5eb3b0950920a65908130876.jpg

表格还需要添加边框

http://img.mukewang.com/climg/5eb3b0d4095c78e408170245.jpg

效果

http://img.mukewang.com/climg/5eb3b0e10900e43403800186.jpg

自己再测试下,祝学习愉快!

0
hurora_Meteor
h 1、为什么设置边框直接使用border而不是table.style.border呢?我试了后者不会报错但是也不显示边框,border难道不是样式属性么?还是说在js里使用的时候它的用法特殊只能这么写? 2、我在本地浏览器运行可以正常显示,但是在在线编译把listData改成data: listData以后运行就不会显示任何东西了,标题也不见了,是在线编译器的问题?
h020-05-07
共1条回复

好帮手慕星星

2020-05-08

同学你好,标签中属性大部分是这样的,只写数字会默认加上px单位,也会默认加上引号

http://img.mukewang.com/climg/5eb4bcb30921ed1302800147.jpg

http://img.mukewang.com/climg/5eb4bcc909cd1d5207910160.jpg

或者自己写的添加加上引号和单位

http://img.mukewang.com/climg/5eb4bcf109d1ab9b02900146.jpg

但是css中不能只写数字,会解析不正确

http://img.mukewang.com/climg/5eb4bd0509e0e78703870128.jpg

在练习过程中慢慢总结就好,祝学习愉快!

0

好帮手慕星星

2020-05-07

同学你好,问题解答如下:

1、border是table标签的自有属性,所以可以直接设置

http://img.mukewang.com/climg/5eb3ea3a092d92dc16720674.jpg

忘记了可以回顾一下:

https://class.imooc.com/lesson/744#mid=18326

如果想要使用js设置,属性值不能只能是宽度,还需要有样式和颜色,符合css设置。例如

http://img.mukewang.com/climg/5eb3eaa109a1372606520079.jpg

但是实现效果不一样哦,只有table有边框

http://img.mukewang.com/climg/5eb3eab70939dbaf04410215.jpg

所以还是建议使用border属性设置。

2、这边使用Chrome浏览器打开网站,测试在线编辑没有问题

http://img.mukewang.com/climg/5eb3eb3a09b2132122900660.jpg

建议重置代码可以再测试下。

祝学习愉快!

0
hurora_Meteor
h 这次我打开编辑器它就可以正常显示了。 图里说border属性是table的自有属性,单位是pixel啊,但是您这里直接写的是1,我试了一下要加单位px的话必须加上引号才会生效,是不是所有的属性或者说所有和长度有关的属性都可以用这两种方式写?一种是直接写数值,系统会自动加上默认的单位?另一种是加上引号并且写上数值和单位?
h020-05-07
共1条回复

0 学习 · 10739 问题

查看课程