如何在P

时间:2019-04-22 13:52:37

标签: javascript html

我正在尝试重现可编辑内容的div,例如Disqus注释框。

他们使用内容可编辑的div,其中包含单个<p><p>设置为white-space: pre-wrap

在Chrome上检查时,带有多行的<p>标签看起来像这样:

Multiline p 1

Disqus Exemple (go to comments section on this link and inspect the comment box)

经过研究,我发现双引号表示多个文本节点,因此我尝试:

const text1 = document.createTextNode('123');
    const text2 = document.createTextNode('456');
    const text3 = document.createTextNode('789');

    root.childNodes[0].appendChild(text1);
    root.childNodes[0].appendChild(text2);
    root.childNodes[0].appendChild(text3);

现在我得到了,它在检查时是相似的,但是它们显示为单行而不是多行:

enter image description here

enter image description here

带有示例的片段

如何在多行中获得“ 123”,“ 456”,“ 789”?

const root = document.getElementById('root');
const p = document.getElementById('p1');

const text1 = document.createTextNode('123');
const text2 = document.createTextNode('456');
const text3 = document.createTextNode('789');

function handleClick() {
  p.appendChild(text1);
  p.appendChild(text2);
  p.appendChild(text3);
}
#root {
  border: 1px dotted blue;
  white-space: pre-wrap;
}
<div id="root" contenteditable="true" onClick>
<p id="p1">a</p>
</div>
<button onclick="handleClick()">Click</button>

1 个答案:

答案 0 :(得分:0)

在每个TextNode的末尾添加新的行字符。下面的代码应该可以工作。

const lineBreak='\n';

const root = document.getElementById('root');
const p = document.getElementById('p1');

const text1 = document.createTextNode('123') + lineBreak;
const text2 = document.createTextNode('456') + lineBreak;
const text3 = document.createTextNode('789') + lineBreak;

function handleClick() {
  p.appendChild(text1);
  p.appendChild(text2);
  p.appendChild(text3);
}