Те, що я роблю, це практично однолінійний.
Функція створює об'єкт Range, а потім створює DocumentFragment у діапазоні зі строкою як дочірній вміст.
Потім він захоплює текст фрагмента, видаляє будь-які "невидимі" / нульові ширини символів і обрізає його з будь-якого провідного / відсталого пробілу.
Я усвідомлюю, що це питання давнє, я просто думав, що моє рішення було унікальним і хотів поділитися. :)
function getTextFromString(htmlString) {
return document
.createRange()
// Creates a fragment and turns the supplied string into HTML nodes
.createContextualFragment(htmlString)
// Gets the text from the fragment
.textContent
// Removes the Zero-Width Space, Zero-Width Joiner, Zero-Width No-Break Space, Left-To-Right Mark, and Right-To-Left Mark characters
.replace(/[\u200B-\u200D\uFEFF\u200E\u200F]/g, '')
// Trims off any extra space on either end of the string
.trim();
}
var cleanString = getTextFromString('<p>Hello world! I <em>love</em> <strong>JavaScript</strong>!!!</p>');
alert(cleanString);