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?
 
    