如何使用javascript修改字符串中每个单词的第一个字母,同时保持内部HTML完好无损?

Gaz*_*ion 4 javascript jquery

下面的代码查看带有"title-case"类的任何元素,并修改每个单词的第一个字母,如果它是一个大写字母则稍微大一些.这是代码:

$(document).ready(function(){
    $('.title-case').each(function(){
        $(this).html( capitalize_first_letter( $(this).html() ) );
    });
});

function capitalize_first_letter( str ) {
    var words = str.split(' ');
    var html = '';
    $.each(words, function() {
        var first_letter = this.substring(0,1);
        html += ( first_letter == first_letter.toUpperCase() ? '<span class="first-letter">'+first_letter+'</span>' : first_letter )+this.substring(1) + ' ';
    });
    return html;
}
Run Code Online (Sandbox Code Playgroud)

你可以看到它在这里运行:http://jsfiddle.net/82Ebt/

它在大多数情况下都有效,但正如您从示例中看到的那样,它将破坏内部HTML节点.我真的不知道如何解决这个问题并且可以使用一些想法.我想可能只是操纵.text()而不是.html()但是直接删除了HTML.

编辑:我想指出我使用javascript的原因是因为我希望字符串中的每个单词都有更大的第一个字母,如果它是大写的.:first-letter伪类只影响第一个单词.

谢谢 :)

Bla*_*ger 6

这似乎有用,至少在现代浏览器中 - 使用.html()回调和.replace()正则表达式只检测初始大写字母:

$('.title-case').html(function(i,el) {
    return el.replace(/\b([A-Z])/g, "<span class=\"first-letter\">$1</span>");
});
?
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/mblase75/82Ebt/4/