$('.js-cropped-word').text((i, text) => text.replace(/(?<=\S{19,}).+/, '...'));
UPD. Вынесено из комментариев:
В Сафари не работает
Это из-за lookbehind. Делайте тогда так:
document.querySelectorAll('.js-cropped-word').forEach(n => {
n.textContent = n.textContent.replace(/(\S{19}).+/, '$1...');
});
Или вообще можно от регулярных выражений отказаться, правда, получится весьма многословно:
const max = 19;
for (const n of document.getElementsByClassName('js-cropped-word')) {
const words = n.innerText.split(' ');
const i = words.findIndex(n => n.length > max);
if (i !== -1) {
words.length = i + 1;
words[i] = words[i].slice(0, max) + '...';
n.innerText = words.join(' ');
}
}