- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
"的有趣转换-6ren"> "的有趣转换-我的项目中有一些非常简单的代码,如下所示: const textToHtml = (text) => { const div = document.createElement('div'); -6ren">
我的项目中有一些非常简单的代码,如下所示:
const textToHtml = (text) => {
const div = document.createElement('div');
div.innerText = text;
return div.innerHTML;
}
const htmlToText = (html) => {
const div = document.createElement('div');
div.innerHTML = html;
return div.innerText;
}
这几个月一直正常,前几天遇到一个问题:在某些浏览器中htmlToText('<br>')
不再返回'\n'
和往常一样,它返回 ''
,所以:
textToHtml(htmlToText('<br>'))
// A few months ago got '<br>'
// but today got '', I lost my '<br>'
在 Mac Chrome 版本中:73.0.3683.75
和 Mac Firefox 版本:66.0.3 (64-bit)
'<br>'
迷路了,但在 Mac Safari 版本中没有:12.1 (14607.1.40.1.4)
, 其他版本和平台未测试。
我确信他们几个月前的版本运行良好,我知道解决问题的方法(我可以自己用 RegExp 将所有 '<br>'
替换为 '\n'
),我只是想知道有没有其他人遇到过同样的情况?这是浏览器中的错误吗?
最佳答案
MDN 上有一个例子比较 innerText
的文档和 textContent
并明确表示:
This example compares
innerText
withNode.textContent
. Note howinnerText
is aware of things like<br>
tags, and ignores hidden elements.
所以,我已经在 Firefox 66.0.3 (64bits)
上测试过了如果您设置/获取属性的来源/位置的元素呈现或存在于 document.body
上,它仍然有效在您执行操作时。您可以查看接下来的两个示例:
示例 1:div
document.body
上已存在元素
const textToHtml = (text) => {
const div = document.getElementById('test');
div.innerText = text;
return div.innerHTML;
}
const htmlToText = (html) => {
const div = document.getElementById("test");
div.innerHTML = html;
console.log("Note <br> is parsed to \\n =>", div.innerText);
return div.innerText;
}
console.log("Output =>", textToHtml(htmlToText(`Some<br>Other`)));
.as-console {background-color:black !important; color:lime;}
<div id="test"></div>
示例 2:div
元素动态附加到 document.body
上
const textToHtml = (text) => {
const div = document.createElement('div');
document.body.append(div);
div.innerText = text;
return div.innerHTML;
}
const htmlToText = (html) => {
const div = document.createElement('div');
document.body.append(div);
div.innerHTML = html;
console.log("Note <br> is parsed to \\n =>", div.innerText);
return div.innerText;
}
console.log("Output =>", textToHtml(htmlToText(`Some<br>Other`)));
.as-console {background-color:black !important; color:lime;}
而且,就像你说的,如果 document
上不存在该元素,它将无法工作(在某些较新的浏览器上) ,但是我不知道到底是什么原因(也许是因为您创建的元素未呈现):
示例 3:div
document.body
上不存在元素
const textToHtml = (text) => {
const div = document.createElement('div');
div.innerText = text;
return div.innerHTML;
}
const htmlToText = (html) => {
const div = document.createElement('div');
div.innerHTML = html;
console.log("Note <br> isn't parsed to \\n =>", div.innerText);
return div.innerText;
}
console.log("Output =>", textToHtml(htmlToText(`Some<br>Other`)));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
无论如何,我已经找到了下一个创建 div
的方法。元素,将其附加到 body
然后 removes
它。这样,您不会有任何视觉干扰,并且应该适用于所有浏览器:
const textToHtml = (text) => {
const div = document.createElement('div');
document.body.append(div);
div.innerText = text;
const html = div.innerHTML;
div.remove();
return html;
}
const htmlToText = (html) => {
const div = document.createElement('div');
document.body.append(div);
div.innerHTML = html;
const text = div.innerText;
div.remove();
return text;
}
console.log("Output =>", textToHtml(htmlToText(`Some<br>Other`)));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
额外: 关于 innerText
有很好的读物在 the-poor-misunderstood-innerText
关于javascript - innerHTML 和 innerText 之间 "<br>"的有趣转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55804438/
有没有办法只获取顶部元素的 innerText(并忽略子元素的 innerText)? 例子: top node text child node text 如何在忽略“子节点文本”
我想获取 的 innerText没有 innerText在跨度内...这是页面的 HTML: var title = document.querySelector('div.col-md-8.inf
在这种情况下,我尝试使用关卡菜单,但是 this.innerText 不起作用 function levelJump() { console.log(this);// Window {wind
假设我有:return this value 基本上我想得到 的 innerText基于类名的标签。 问题是当我尝试:alert(document.getElementsByClassName("h
我有一个 html 元素,例如: Change only mebut not me 但我只想更改第一个文本并让子 div 保持原样 document.getElementById("el1").inn
1st Division 2016/2017
我有一些这样的HTML(我无法更改): Employee Name: John Smith 我想使用xpath提取“ John Smith”部
当节点在集合中时,有没有办法获取节点的内部文本目前我有这个 Collection DependentNodes = new Collection(); foreach (XmlNode node in
我想知道 innerText 属性。考虑以下标记: HTML foo bar 然后,让我们运行以下代码: JS var
我有一个包含一些文本的 div 和一个子 div。我想更新外部 div 文本并保留子 div。 some text here 如果我尝试 outer.innerText = "foo",向下
我的以下代码有错误。如果选择了元素(选择的类是选择的元素),我试图获取 id id05 的值。 HTML: t1
我写了这段代码: // Welcome to ASP.NET! 当我运行它时,出现此错误:无法设置未定义或空引用的属性“in
我们有这样的 XML: Some text here Child 1 Child 2 我们正在使用 XmlDocument 来解析它。 当我们有“节点”元素的 XmlNo
我如何将文本添加到 XML 元素中?例如: I want to add text here 我已经创建了 DOMDocument,并开始添加元素。这是我需要将文本添加到的元素。 $title = $v
假设您有一个按钮可以替换同一区域、同一页面内的段落。 您能否通过设置 innerText 或 textContent 使每次切换都淡入? 我现在使用 keyframes 将其不透明度从 0 更改为 1
我想问一下如何通过 Javascript 更改单选按钮的标签 innerText(见下面的代码)同时不清除输入标签里面。此处的标签 innerText 表示“Button-Label-X”。 我尝试通
我试图获取元素的 innerText,但 Chrome 返回一个空字符串,因为我的元素被隐藏了。 Firefox 没有。 即使元素不可见,是否有办法在 Chrome 中检索 innerText? co
刚从jQuery 1.3.2升级到1.8.2,发现1.3.2的几个功能不能用了。我已经修复了其中的大部分问题,但仍停留在这个问题上: 我需要根据表格单元格中的前几个字符进行搜索(“开头为”搜索),但此
假设我有以下代码: some text var d = document.getElementByid('d'); var innerText = d.inn
我正在尝试编写一个函数(在 JavaScript 中),它将在 中写一个句子例如,通过在每个字母之间停顿 300 毫秒,一个接一个地写入其字母来标记。我写了以下内容: var tex
我是一名优秀的程序员,十分优秀!