Если вместо использования text()
использовать html()
, чтобы получить html как элемент, а затем заглавные буквы для каждого слова. Я немного упростил регулярное выражение до /\b\w+\b/ig
, которое будет соответствовать границе слова, за которой следуют один или несколько символов и граница слова. Это также будет соответствовать начальному символу в HTML-теге, но это не должно вызывать никаких проблем. Вместо клонирования и замены узла я просто обновляю html, который должен быть быстрее, поскольку он легче при взаимодействии с DOM.
function capitalise(str) {
if (!str) return;
var stopWords = ['a', 'an', 'and', 'at', 'but', 'by', 'far', 'from', 'if', 'into', 'of', 'off', 'on', 'or', 'so', 'the', 'to', 'up'];
str = str.replace(/\b\w+\b/ig, function(match) {
return $.inArray(match, stopWords) == -1 ? match.substr(0, 1).toUpperCase() + match.substr(1) : match;
});
return str;
}
$('th.title2').each(function() {
var capclone = $(this), newHtml = capitalise(capclone.html());
capclone.html(newHtml);
});
Вы можете играть с кодом в этой скрипке .