I'm write a parser that gets data from hidden iframes.
In text i need to replace \n
(↵) characters by (space).
I use this for this task -
text.replace(/\n/gi, " ")
.
However, it is only works for visible elements (i.e. don't haven't display: none
).
If the element is not visible (display: none
) new-lines just disappears and don't get any replacement.
HTML Example:
<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 Example:
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")
What I tried:
.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
Did you testing?
I'm 99% sure it's because of display: none
. I tested it and different display of iframes give me different result.
TextContent
I don't need textContent
because this returns a text without \n
characters. I use innerText
.
Questions:
- Can unexpected result be not because of that
display: none
? - How should i do to achieve the expected result?