Javascript 使用数组将 li 添加到 ul

Javascript add li to ul using array

我正在为我的 children 开发一个拼写游戏,我想根据他们输入的内容和创建的数组显示一个拼写列表。 这是我在 github https://github.com/urock24/myWebSite.git

上的项目的 link

这是有问题的代码,javascript 首先是

function populateSpellList() {      
    // for loop should run through spelling list array and create list items in "listSpelling"

    for (var i = 0; i < spellingList.length; i++ ) {
        // create a new li
        var newLI = document.createElement("li");
        var indSpellingWord = spellingList[i];

        // grab the spelling list item 
        var newContent = document.createTextNode(indSpellingWord);

        // add the spelling list item to the li
        newLI.appendChild(newContent);

        // get the unordered list and add the new li
        var displaySpellList = document.getElementById("listSpelling");     

        displaySpellList.appendChild(newLI);
    }   
}

还有 HTML

<div id = "theSpellingList">

            <h3>The Spelling List</h3>
            <ul id = "listSpelling">
               <li>test </li>
            </ul>

        </div>

除了最后一行之外,我可以在函数的每一行之后弹出一个警报,而且它似乎只弹出一次。但无论发生什么,它都不会在该列表中显示任何列表项。

我在这里看到了很多 jquery 示例,所以我肯定会继续学习 jquery,但是现在 "plain" javascript 会很棒.

更多的是评论而不是答案,您的基本代码似乎可以很好地处理一些添加的测试数据。以下是一些使代码更简洁的建议:

<script>

// List of words
var spellingList = ['foo','bar','fum'];

function populateSpellList() {

  // Get list once and store reference
  var list = document.getElementById("listSpelling");

  // Declare variables once, near top is good
  var li;

  // for loop should run through spelling list array and create list items in "listSpelling"
  for (var i = 0; i < spellingList.length; i++ ) {

    // Create new LI
    li = document.createElement("li");

    // Append the spelling word
    li.appendChild(document.createTextNode(spellingList[i]));

    // Add to list
    list.appendChild(li);
  }
}

// Call the function when the document is ready
window.onload = populateSpellList;
</script>

<div id = "theSpellingList">
  <h3>The Spelling List</h3>
  <ul id = "listSpelling">
    <li>test </li>
  </ul>
</div>

您可以用更少的代码行完成上述操作,但它变得有点难以管理。更少的代码并不总是 "better".

你可以做到这一点。确保你的 JS 放在 HTML 之后,或者放在 window.onload 函数中。

var listEl = document.getElementById('listSpelling');

var spellingList = ['word1', 'word2', 'word3', 'word4'];

var populateList = function(arr){
    var str = '';
    for(var i = 0; i < arr.length; i++){
        str += '<li>' + arr[i] + '</li>';
    }
    return str;
}

listEl.innerHTML = populateList(spellingList);

Fiddle

const populateSpellList = (items) => { 
  document.querySelector("#listSpelling").insertAdjacentHTML(
    "beforeend",
    items.reduce((acc, item) => acc += `<li>${item}</li>`, "")
  );
};

populateSpellList(["Word1", "Word2", "Word3"]);
<ul id="listSpelling"><li>test</li></ul>

据我所知,您正试图将元素插入到通过 iFrame 嵌入的文档中。但是你不能那么简单地做到这一点。 问题是,当您从父级(不是 iframe)window 调用 document.getElementById 时,它会尝试在父级 window 中查找元素。但是 iFrame 是一个单独的 window.

您可以尝试关注

在每个 特定游戏 html 文件中:

<body>
  <!-- SOME CONTENT HERE -->

  <!-- RIGHT BEFORE `BODY` CLOSE -->
  <script>
    // This will run your code once document is loaded.
    window.onload = function () {
        // run the createName function
        createName();
        // run the createList function 
        createList();
        //play game
        playGame(target);
    };
  </script>
</body>

learningGames.js中:

function populateSpellList() {  

    // for loop should run through spelling list array and create list items in "listSpelling"
    var i;
    for (i = 0; i < spellingList.length; i++ ) {

        var newLI = document.createElement("li"), // create a new li
            displaySpellList = document.getElementById("listSpelling"), // cache the unordered list
            newContent = document.createTextNode(spellingList[i]); // grab the spelling list item

        // add the spelling list item to the li
        newLI.appendChild(newContent);

        displaySpellList.appendChild(newLI);
    }
}

function gameWindow(target) {
    // set the iframe html to the target html 
    document.getElementById('game_frame').src = target;
}

希望这正是您所需要的。