我正在编写一个解析器,从隐藏的 iframe 中获取数据。
在文本中我需要替换\n
(↵) 个字符
(空间)。
我用它来完成这项任务 -text.replace(/\n/gi, " ")
。
但是,它仅适用于可见元素(即没有display: none
)。
如果该元素不可见(display: none
) 新行就消失了并且没有得到任何替代。
HTML 示例:
<div data-custom="languages">
<div>
<div>
<h2>
<span>Just a text that will be removed</span>
</h2>
<p>A - b</p>
<p>c - d</p>
</div>
</div>
</div>
JS示例:
visibleIframe.style.display = "block";
invisibleIframe.style.display = "none";
const visibleDivWithNestedDivs = visibleIframe.querySelector(`[data-custom="languages"]`);
const invisibleDivWithNestedDivs = invisibleIframe.querySelector(`[data-custom="languages"]`);
const visibleText = visibleDivWithNestedDivs.innerText; // "A - b↵c - d"
const invisibleText = invisibleDivWithNestedDivs.innerText; // "A - b↵c - d"
console.log(visibleText.replace(/\n/gi, " ")); // "A - b c - d" (expected result)
console.log(invisibleText.replace(/\n/gi, " ")); // "A - bc - d" (unexpected result, no space between "b" and "c")
我尝试过的:
.replace(/\n/gi, " ")
.replace(/\r\n/gi, " ")
.replace(/↵/gi, " ")
.replace(/↵↵/gi, " ") // in some cases there was two of this.
.split("↵").join(" ")
.split("\n").join(" ")
white-space: pre
white-space: pre-wrap
你测试了吗?
我99%确定这是因为display: none
。我测试了它,不同的 iframe 显示给了我不同的结果。
文本内容
我不需要textContent
因为这会返回一个没有文本的文本\n
人物。我用innerText
.
问题:
- 意想不到的结果难道不是因为那样吗
display: none
?
- 我该怎么做才能达到预期的效果?