Search code examples
jquerycapitalize

Javascript/jQuery Capitalize each word with array of exceptions and words with 3 or less characters


I have this code working: http://jsfiddle.net/Q2tFx/

$.fn.capitalize = function () {
$.each(this, function () {
    var split = this.value.split(' ');
    for (var i = 0, len = split.length; i < len; i++) {
        split[i] = split[i].charAt(0).toUpperCase() + split[i].slice(1);
    }
    this.value = split.join(' ');
});
return this;
};

$('.title').on('keyup', function () {
    $(this).capitalize();
}).capitalize();

I would like to have a list of words of exceptions.

Also, I don't want to capitalize words with 3 or less characters.

How could I do this?

Thanks!


Solution

  • Try something like this: http://jsfiddle.net/Q2tFx/10/

    $.fn.capitalize = function () {
      var wordsToIgnore = ["to","and","the","it", "or", "that", "this"],
          minLength = 3;
      function getWords(str) {
        return str.match(/\S+\s*/g);
      }
      this.each(function () {
        var words = getWords(this.value);
        $.each(words,function(i,word) {
          // only continue if word is not in ignore list
          if (wordsToIgnore.indexOf($.trim(word)) == -1 && $.trim(word).length > minLength) {
            words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);
          }
        });
        this.value = words.join("");
      });
    };
    
    $('.title').on('blur', function () {
      $(this).capitalize();
    }).capitalize();
    

    currently set to ignore words shorter than 3 characters and the ones in the list