繁体   English   中英

如何在Javascript中生成多个新的HTML标签

[英]How do I generate multiple new HTML tags in Javascript

我正在编写一个涉及经典“ FizzBu​​zz”编码问题的小型练习程序。 我的目标是让用户输入两个数字,并在屏幕上打印Fizz,Buzz和FizzBu​​zz以及未分配这些特定单词的数字。

我编写了一个函数,该函数可以接收用户的数字并运行它们以输出数字和单词。 它可能并不漂亮,但是可以工作。 我已经在控制台中对其进行了测试。 我现在想做的是将输出打印到屏幕上。 我正在通过javascript创建<li>标记并将文本附加到它们。 然后,我将该列表项附加到html文档中已经存在的<ul>上。

这是我的HTML

<div class="main-container" id="main-container">

        <h1 class="title" id="title">Fizz Buzz</h1>

        <!-- first form container -->
        <div class="first-multiple-container" id="first-multiple-container">

            <h3 class="first-multiple-title" id="first-multiple-title">Enter First Multiple</h3>
            <textarea  id="text-area-1" rows="2" cols="10"></textarea>
        </div>

        <!-- second form container -->
        <div class="second-multiple-container" id="second-multiple-container">

            <h3 class="second-multiple-title" id="second-multiple-title">Enter Second Multiple</h3>
            <textarea  id="text-area-2" rows="2" cols="10"></textarea>
        </div>

        <div id="button-container">
          <div id="button">Print Values</div>
        </div>

        <div>
          <ul id="output"></ul>
        </div>

    </div>

这是我的Javascript代码

const text1 = document.getElementById('text-area-1');
const text2 = document.getElementById('text-area-2');
const output = document.getElementById('output');
const list = document.createElement('li');


function findValue(event, num1, num2) {

  let i = 1;

  while (i <= 30) {
    if (i % num1 == 0 && i % num2 == 0) {

      list.appendChild(document.createTextNode('FizzBuzz '));
      output.appendChild(list);

    } else if (i % num1 == 0) {

      list.appendChild(document.createTextNode('Fizz '));
      output.appendChild(list);

    } else if (i % num2 == 0) {

      list.appendChild(document.createTextNode('Buzz '));
      output.appendChild(list);

    } else {
      list.appendChild(document.createTextNode(i + ' '));
      output.appendChild(list);
    }

    i++;
  }
}

document.getElementById('button').addEventListener('click', function (evt) {
    findValue(evt, text1.value, text2.value);
  });

从某种意义上说,这段代码在将所有正确的输出打印到屏幕上,但全部都在一个<li>标签内,因此可以正常工作。 因此,它只是数字和单词的长横线。 我假设这种情况正在发生,因为我只创建了一个<li>标记,所有内容都被追加到该标记中。

是否可以为每个单词或数字创建新的<li>标签? 还是在每个空格后都打破了界限? 我希望将输出列在一条垂直线中,而不是一条长水平线中。

是的,问题在于您只创建了一个<li>标记,然后将每个单词或数字附加到该标记上。 我已经修改了您的代码,为每个生成的单词或数字创建一个新的<li>标记:

 document.addEventListener("DOMContentLoaded", function() { const text1 = document.getElementById('text-area-1'); const text2 = document.getElementById('text-area-2'); let output = document.getElementById('output'); function findValue(event, num1, num2) { let i = 1, list; while (i <= 30) { if (i % num1 == 0 && i % num2 == 0) { list = document.createElement('li'); list.innerHTML = 'FizzBuzz '; output.appendChild(list); } else if (i % num1 == 0) { list = document.createElement('li'); list.innerHTML = 'Fizz '; output.appendChild(list); } else if (i % num2 == 0) { list = document.createElement('li'); list.innerHTML = 'Buzz '; output.appendChild(list); } else { list = document.createElement('li'); list.innerHTML = i + ' '; output.appendChild(list); } i++; } } document.getElementById('button').addEventListener('click', function(evt) { findValue(evt, text1.value, text2.value); }); }); 
 <body> <div class="main-container" id="main-container"> <h1 class="title" id="title">Fizz Buzz</h1> <!-- first form container --> <div class="first-multiple-container" id="first-multiple-container"> <h3 class="first-multiple-title" id="first-multiple-title">Enter First Multiple</h3> <textarea id="text-area-1" rows="2" cols="10"></textarea> </div> <!-- second form container --> <div class="second-multiple-container" id="second-multiple-container"> <h3 class="second-multiple-title" id="second-multiple-title">Enter Second Multiple</h3> <textarea id="text-area-2" rows="2" cols="10"></textarea> </div> <div id="button-container"> <button id="button">Print Values</button> </div> <div> <ul id="output"></ul> </div> </div> </body> 

对于上面的演示,我将#button从<div>变成了<button>以使其更容易告诉您应该单击它。

可以像下面这样简化while循环:

 while (i <= 30) { list = document.createElement('li'); if (i % num1 == 0 && i % num2 == 0) { list.innerHTML = 'FizzBuzz '; } else if (i % num1 == 0) { list.innerHTML = 'Fizz '; } else if (i % num2 == 0) { list.innerHTML = 'Buzz '; } else { list.innerHTML = i + ' '; } output.appendChild(list); i++; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM