I have a div with a contentEditable attribute and I struggle to extract the first text occurence from a string.
I am using innerHTML to get the text from it( I need to use it, can not use innerText or textContent) and it comes with a lot of <br>.
The string will be something like this:
'<br> This is some text <br> <br> Another piece of text'. I need only the text('This is some text') without <br>.
The string will always have <br> in it and the place of the <br> may vary.
I tried using the replaceAll('<br>', '') and it returns 'This is some text Another piece of text' but I need only the first occurence 'This is some text'.
CodePudding user response:
You can use string.split() to divvy up the content by <br>, then run that through a simple filter that will remove any empty items in the array, and finally choose the first item in the array, which will be the text you want.
let fragment = document.querySelector('div.content').innerHTML.split('<br>').filter(a => a.trim())[0].trim() ;
console.log(fragment);
<div class='content'>
<br>
<br> <br>
This is some text <br>
<br>
<br> This is some more text <br>
</div>
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
CodePudding user response:
Try
function getFirstNonBlankSubstring(text, separator) {
const array = text.split(separator);
for (const substring of array) {
if (substring.trim()) {
return substring;
}
}
}
getFirstNonBlankSubstring(element.innerHTML, '<br>') should give you what you need as long as you can count on the <br> tags looking exactly like that.
If you can't, you may need to walk the DOM to find text nodes.
CodePudding user response:
You can doit like this
//get the text and remove white space from left
var readText = document.getElementById("content").textContent.trimLeft();
//How many splits you want out
var freeSpaces = 3;
//
var splittext = readText.split(' ');
var newText = splittext.slice(0, freeSpaces);
//final text
var finalText = newText.join(' ');
