【问题标题】:Turning an array into a list using appendChild使用 appendChild 将数组转换为列表
【发布时间】:2019-10-22 10:04:23
【问题描述】:

如何创建函数接受两个参数,第一个是要添加到的列表元素,第二个是要转换为列表项的字符串数组。

参数是元素和arr。我尝试创建列表元素并使用 appendChild 将数组字符串附加到元素中。

function filler(elem, arr){
  elem = document.createElement("li");
  for(let i = 0; i < arr.length; i++){
    elem.appendChild(arr[i]);
  }
}

错误信息:

在 'Node' 上执行 'appendChild' 失败:参数 1 不是类型 '节点'。

【问题讨论】:

标签: javascript arrays list


【解决方案1】:

你有几个问题:

  1. 您正在函数中重新初始化 elem,因此,传递的 elem 将被覆盖,这意味着您将无法向其附加元素。

  2. 您正在尝试将字符串附加到您的 elem 元素。这不起作用,因为您需要附加一个节点(因为appendChild() 接受一个节点,而不是一个字符串)。要附加一个节点,您可以使用document.createElement("li") 在您的JS 中创建一个&lt;li&gt; HTML 元素,然后您可以将文本设置为当前数组值的文本(使用.textContent)。

请看下面的例子:

function filler(elem, arr){
  for(let i = 0; i < arr.length; i++){
    const li = document.createElement("li");
    li.textContent = arr[i];
    elem.appendChild(li);
  }
}

const lst = document.getElementById('lst');
filler(lst, ["eggs", "bread", "butter"]);
&lt;ul id="lst"&gt;&lt;/ul&gt;

【讨论】:

    【解决方案2】:

    填充元素并返回完整列表。

    function filler(elem, arr){
      for(let i = 0; i < arr.length; i++){
        listItem = document.createElement('li');
        listItem.innerHTML = arr[i];
        elem.appendChild(listItem);
      }
      return elem;
    }
    

    这是一个用例filler(document.createElement('ul'), ['a', 'b', 'c']);

    【讨论】:

    • 最好使用textContent 而不是innerHTML
    • 取决于 OP 实际上想要什么,可以是有效 HTML 元素的列表吗?
    猜你喜欢
    • 2023-03-20
    • 2012-04-16
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多