【问题标题】:Display input from text area as HTML and assign IDs to the HTML elements将来自文本区域的输入显示为 HTML,并将 ID 分配给 HTML 元素
【发布时间】:2020-01-06 10:11:19
【问题描述】:

我正在使用一个函数将字符串从模式中的 textArea 添加到数组,然后使用 innerHTML (which I learned here) 将它们打印到 DOM。该函数通过模态框上的按钮调用。

function setArray( ){
      let textAreaElement = document.getElementById('textToArray');
      let listArray = textAreaElement.value.trim().split('\n');
      console.log(listArray);
      document.getElementById('PrintToSidebar').innerHTML = listArray.join("<p>");//I want to add IDs in the <p> tags created here
      modal.style.display = "none";
    }

这似乎运作良好,但我还想为每个 &lt;p&gt; 设置一个 ID,ID 等于字符串值。

例如,如果 listArray = ["Line 1", "Line 2"],那么我想要的 innerHTML 将导致:

<p id="line-1">Line 1</p>
<p id="line-2">Line 2</p>

我的搜索似乎表明我需要使用 setAttribute 方法。但我也在想我需要先循环遍历 listArray。

我只接触了 Javascript 几天(实际上对编码完全陌生),因此详细的解决方案将非常有帮助。谢谢!

【问题讨论】:

  • 最好不要使用innerHTML,而是用document.createElement创建p标签,这样你就可以设置它们的id属性。
  • 值得注意的是,建议的idline 1line 2technically invalid,因为id 中不能有空格。这可以通过 Javascript Replace 函数删除空格轻松缓解。

标签: javascript html arrays


【解决方案1】:

您可以循环数组并借助内置函数document.createElement("p) 动态创建p 元素,然后在textContent 属性上设置文本,在id 属性上设置id新创建的元素。

我使用trim() 删除字符串开头和结尾的空格,并使用replace 将空格替换为-replace 第一个参数是一个正则表达式,您可以在 Link 上了解更多信息

最后一步是将新创建的元素附加到 dom。 吨

/* Appends the element to DOM*/
function display(ele) {
    const display = document.getElementById('PrintToSidebar');
    display.append(ele);
}

function setArray() {
    let textAreaElement = document.getElementById('textToArray');
    let listArray = textAreaElement.value.trim().split('\n');
    listArray.forEach(item => {
        const p = document.createElement("p");
        p.textContent = item;
        p.id = item.trim().replace(/\s/g, "-");
        display(p);
    });
}
 <textarea id="textToArray">Line 1 
Line 1
</textarea>
<div id="PrintToSidebar"> </div>
<button onclick="setArray()">Generate tag</button>

【讨论】:

  • 我在让它工作时遇到了一些麻烦。我收到一个错误:“未捕获的 TypeError:无法读取属性 'append' of null”,但我会继续使用它。谢谢!
  • 因为你的代码中没有定义'display' div。我已更改代码以将元素附加到 PrintToSidebar 元素。请立即尝试,如果您仍然面临问题,请告诉我。谢谢。
  • 完美!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多