Javascript 为什么从数据属性获取值会影响文本

Javascript 为什么从数据属性获取值会影响文本,javascript,Javascript,我正在努力解决一些语法问题,主要是为什么数据属性(HTML5)会影响文本 请考虑这个例子,它做了预期的 <div id="s"></div> <script> var ele = document.getElementById("s"); var txt = "this is it \n and done"; ele.innerText = txt; </script> 注意,我们现在使用的是datatxt的data属性。问题是,这

我正在努力解决一些语法问题,主要是为什么
数据属性
(HTML5)会影响文本

请考虑这个例子,它做了预期的

<div id="s"></div>    

<script>

var ele = document.getElementById("s");
var txt = "this is it \n and done";
ele.innerText = txt;

</script>
注意,我们现在使用的是
datatxt
的data属性。问题是,这会逐字呈现文本,这意味着我看到了一行:
this is it\n and done

我甚至不能使用replace(
ele.getAttribute(“data txt”).replace('\n','blah');
)这一事实表明,尽管我看到了,但计算机正在读取不同的内容(可能是charcode值或类似值)

为什么会发生这种情况?我该如何预防

编辑


我已经看到了,但这还不够,因为我需要字符串存在于数据txt中,并以
“this is”+字符串的形式连接。fromCharCode(13)+“
对HTML5无效

ele = document.getElementById("t");
txt = ele.getAttribute("data-txt").replace(/\\n/g,'<br>'); 
ele.innerHTML = txt;


***


您将HTML与JavaScript混为一谈

\n
是一个JavaScript字符。
数据-*
属性是HTML。要在HTML中插入换行符,应使用HTML实体
和#10;
(换行符)或
和#13;
(回车符)或它们的组合

HTML不理解
\n
\r
等等

还注意到

<div>This is a line \n Another one</div>
这是一行\n另一行
这不会插入换行符,但下面的代码将:

<div>This is a line &#10; Another one</div>
这是一行
;另一行

查看完整的

列表,在第一种情况下,呈现引擎似乎采用了
\n
并将其转换为

,但是由于在第二个示例中已经绘制了页面,因此使用了文本。
\n
第二种情况是文本斜杠,而不是新行。相关问题:那么什么这是您真正想要实现的吗?是否要使用包含换行符的javascript设置标记的内部文本?如果
innerText
(无论如何都是非标准的)如果不起作用,请使用
innerHTML
textContent
document.createTextNode
。是否要从包含换行符的数据属性中读取文本?然后在该数据属性中实际包含换行符。
\n
在html中与在javascript中不同(请参阅jcubics注释).
/\\n/g
如果你想替换所有新行字符。
你把HTML和JavaScript搞混了。
-这正是我想要的答案。非常清楚,谢谢。我的一般意见是使用

而不是CRLF字符,因为它允许css
空白
属性的可预测行为。如果如果您正在使用此方法,请务必查看此方法。例如:上面的代码将被样式
空白:nowrap;
<div>This is a line &#10; Another one</div>