如何让JavaScript在HTML中迭代到新行?

如何让JavaScript在HTML中迭代到新行?,javascript,html,Javascript,Html,我有两个文件:screery.js和screery.html 我用JavaScript创建了一个数组,其中包含几个杂货店列表项对象。当前,每次迭代时,每个项都会替换前面的项。如何修复代码,使其在web浏览器的新行上打印每个购物项目 我尝试了\n和的几种组合 杂货店.html <!DOCTYPE html> <html> <head><title>Grocery List</title></head> <

我有两个文件:screery.js和screery.html

我用JavaScript创建了一个数组,其中包含几个杂货店列表项对象。当前,每次迭代时,每个项都会替换前面的项。如何修复代码,使其在web浏览器的新行上打印每个购物项目

我尝试了\n和的几种组合

杂货店.html

<!DOCTYPE html>
<html>
    <head><title>Grocery List</title></head>
    <body>
        <script src="grocery.js"></script>
    </body>
</html>
杂货店

var Grocery = /** @class */ (function () {
    function Grocery(name, quantity, groceryType) {
        this.name = name;
        this.quantity = quantity;
        this.groceryType = groceryType;
    }
    return Grocery;
}());
function listPrinter(listItems) {
    return listItems.groceryType + ": " + listItems.name + " - " + listItems.quantity;
}

var item_1 = new Grocery("Apples", "14", "Fruit");
var item_2 = new Grocery("Cookies", "3", "Dessert");
var item_3 = new Grocery("Broccoli", "5", "Vegetable");

var groceryList = [item_1, item_2, item_3];

for (var _i = 0, groceryList_1 = groceryList; _i < groceryList_1.length; _i++) {
    var item = groceryList_1[_i];
    document.body.textContent = listPrinter(item);
}

要将当前项添加到innerText中的现有项,请使用+=和not=替换当前内容

要获得换行符,您必须使用HTML,因此将innerText更改为innerHTML,并添加到每个项目的字符串中

功能杂货店名称、数量、杂货店类型{ this.name=名称; 这个。数量=数量; this.groceryType=groceryType; } 函数listPrinterlistItem{ 返回listItem.groceryType+:+listItem.name+-+listItem.quantity+; } var item_1=新食品杂货店Apples,14,水果; var item_2=新食品杂货店食品,3,甜点; var item_3=新食品杂货店大肠杆菌,5,蔬菜; var groceryList=[项目1、项目2、项目3]; 对于var_i=0,groceryList_1=groceryList_i} 要将当前项添加到innerText中的现有项,请使用+=和not=替换当前内容

要获得换行符,您必须使用HTML,因此将innerText更改为innerHTML,并添加到每个项目的字符串中

功能杂货店名称、数量、杂货店类型{ this.name=名称; 这个。数量=数量; this.groceryType=groceryType; } 函数listPrinterlistItem{ 返回listItem.groceryType+:+listItem.name+-+listItem.quantity+; } var item_1=新食品杂货店Apples,14,水果; var item_2=新食品杂货店食品,3,甜点; var item_3=新食品杂货店大肠杆菌,5,蔬菜; var groceryList=[项目1、项目2、项目3]; 对于var_i=0,groceryList_1=groceryList_i} 你有一张单子。使用适当的HTML元素,一个带有列表项li的有序列表ul。默认情况下,列表项li是一个块元素,因此每个元素都位于新行上

我们将用一个简单的方法使我们的生活变得轻松

在Brad给出了完全有效的评论之后,我们将使用a来管理列表项

功能杂货店名称、数量、杂货店类型{ this.name=名称; 这个。数量=数量; this.groceryType=groceryType; } var item_1=新食品杂货店Apples,14,水果; var item_2=新食品杂货店食品,3,甜点; var item_3=新食品杂货店大肠杆菌,5,蔬菜; var groceryList=[项目1、项目2、项目3]; var fragment=document.createDocumentFragment //迭代数组 groceryList.forEachfunctionitem{ //创建一个列表项 var li=document.createElement'li'; //集合样板内部html li.innerHTML=- //将它添加到我们的片段中 附属物碎片; //更新值 li.querySelector.item.innerText=item.name; li.querySelector.quantity.innerText=item.quantity; li.querySelector.category.innerText=item.groceryType; //为了好玩,让我们根据类型向列表项添加一个类 li.classList.additem.groceryType; }; //更新列表元素一次 document.getElementByIdgroceryList.appendChildfragment 杂货店老板{ 列表样式:无; 左侧填充:0; } 杂货店老板李{ 边缘底部:0.5em; 垫底:0.5em; 边框底部:实心1px黑色; } .项目{ 字体大小:粗体; } .类别{ 显示:块; 字体大小:0.75em; 颜色:CCC; 文本对齐:右对齐; } .水果{背景颜色:费;} .蔬菜{背景色:EFE;} .甜点{背景色:FFE;}
你有一张单子。使用适当的HTML元素,一个带有列表项li的有序列表ul。默认情况下,列表项li是一个块元素,因此每个元素都位于新行上

我们将用一个简单的方法使我们的生活变得轻松

在Brad给出了完全有效的评论之后,我们将使用a来管理列表项

功能杂货店名称、数量、杂货店类型{ this.name=名称; 这个。数量=数量; this.groceryType=groceryType; } var item_1=新食品杂货店Apples,14,水果; var item_2=新食品杂货店食品,3,甜点; var item_3=新食品杂货店大肠杆菌,5,蔬菜; var groceryList=[项目1、项目2、项目3]; var fragment=document.createDocumentFragment //迭代数组 groceryList.forEachfunctionitem{ //创建一个列表项 var li=document.createElement'li'; //集合样板内部html li.innerHTML=- //将它添加到我们的片段中 附属物碎片; //更新值 li.querySelector.item.innerText=item.name; li.querySelector.quantity.innerText=item.quantity; li.querySelector.category.innerText=item.groceryType; //为了好玩,让我们根据类型向列表项添加一个类 li.classList.additem.groceryType; }; / /更新列表元素一次 document.getElementByIdgroceryList.appendChildfragment 杂货店老板{ 列表样式:无; 左侧填充:0; } 杂货店老板李{ 边缘底部:0.5em; 垫底:0.5em; 边框底部:实心1px黑色; } .项目{ 字体大小:粗体; } .类别{ 显示:块; 字体大小:0.75em; 颜色:CCC; 文本对齐:右对齐; } .水果{背景颜色:费;} .蔬菜{背景色:EFE;} .甜点{背景色:FFE;}
你需要为每一个项目添加一个标记来换行。你需要为每一个项目添加一个标记来换行。我很欣赏这个答案的彻底性,但是使用模板文本将文本插入HTML上下文是完全不合适的。它需要正确转义,最简单/最好的方法就是简单地设置元素的文本内容。请不要教人们这是做HTML模板的方法。。。这就给他们带来了安全问题和其他问题。@Brad-这是我一贯的做法,但并不意味着这是正确的。你能给我点什么快速的资源来提高我的知识吗?主要是关于模板应该怎么做。是的,有很多可能的方向。让我看看能否解释要点。想象一下,如果杂货店商品的名称是文本。这会被插入到HTML中,而现在整个页面都被破坏了,因为浏览器认为我们需要一个名为snakts的属性的标记。或者,更恶意的是,某人的用户名为,并且出现在网站的用户列表中。现在,该脚本可以完全控制所有用户的所有操作。解决此问题的方法是在创建元素后设置元素的innerText属性。然后,浏览器知道此任意文本是。。。文本,而不是脚本。然后,不管文本是什么,它都是安全的。现在,到处设置innerText可能会非常乏味。为此,有数百个框架和模板引擎。对于任何我需要经常更新的东西,或者当我需要更复杂的应用程序时,我喜欢使用Riot.js。对于一次性更新,我通常使用EJS。我欣赏这个答案的彻底性,但使用模板文本将文本推入HTML上下文是完全不合适的。它需要正确转义,最简单/最好的方法就是简单地设置元素的文本内容。请不要教人们这是做HTML模板的方法。。。这就给他们带来了安全问题和其他问题。@Brad-这是我一贯的做法,但并不意味着这是正确的。你能给我点什么快速的资源来提高我的知识吗?主要是关于模板应该怎么做。是的,有很多可能的方向。让我看看能否解释要点。想象一下,如果杂货店商品的名称是文本。这会被插入到HTML中,而现在整个页面都被破坏了,因为浏览器认为我们需要一个名为snakts的属性的标记。或者,更恶意的是,某人的用户名为,并且出现在网站的用户列表中。现在,该脚本可以完全控制所有用户的所有操作。解决此问题的方法是在创建元素后设置元素的innerText属性。然后,浏览器知道此任意文本是。。。文本,而不是脚本。然后,不管文本是什么,它都是安全的。现在,到处设置innerText可能会非常乏味。为此,有数百个框架和模板引擎。对于任何我需要经常更新的东西,或者当我需要更复杂的应用程序时,我喜欢使用Riot.js。对于一次性更新,我通常使用EJS。