【问题标题】:jQuery Title CasejQuery 标题案例
【发布时间】:2011-07-02 11:09:57
【问题描述】:

jQuery 是否有内置方式来“标题大小写”字符串?所以给定像 bob smith 这样的东西,它就变成了“Bob Smith”?

【问题讨论】:

  • 仅供参考:驼峰式字符串不应包含空格。
  • 单词中第一个字符大写的单词是什么?
  • sentence case 是您正在寻找的,尽管知道将专有名词大写可能是一个很大的要求。
  • — 听起来您在描述“标题大小写”,每个单词都以大写字母开头。
  • 标题有误导性,请改成“标题大小写”

标签: javascript jquery string


【解决方案1】:

你不需要 jQuery。可以使用原生的.replace() 方法来完成:

function toTitleCase(str) {
    return str.replace(/(?:^|\s)\w/g, function(match) {
        return match.toUpperCase();
    });
}

alert(toTitleCase("foo bar baz")); // alerts "Foo Bar Baz"

【讨论】:

  • 虽然下面的 CSS 解决方案有效,但它不会将输入的值替换为 TitleCase 返回。它只是给出了它已经完成的视觉效果。这个解决方案对我很有效。
  • 此外,您根本不需要 javascript!您可以通过 CSS 执行此操作,如下所述。
  • @TNC — CSS 解决方案很可能是对提问者最初的问题的更好解决方案,但它实际上并不能解决所提出的问题 (如何更改“字符串”)。虽然提到 jQuery 强烈暗示了这一点,但问题从未真正说明涉及浏览器。毕竟,他们可能正在使用jQuery in Node! ;-)
  • 我看了这里 ... developer.mozilla.org/en-US/docs/JavaScript/Reference/… ... 但无法弄清楚 ^| 正在做什么,因为 ^ 意味着在开头匹配或否定字符集。 | 是一个布尔值或。但是非捕获组(?:^|\s)到底在做什么呢?
  • @livingston_mechanical — 表示“字符串的开头或空白字符”。
【解决方案2】:

你可以使用css,比如:

.className 
{
    text-transform:capitalize;
}

这将第一个字母大写。你可以阅读更多here

【讨论】:

  • 说真的。这是正确的答案。所有其他人都是愚蠢的,而且太过分了。如果你必须有 jQuery,那么试试这个: $('#test').css('textTransform', 'capitalize');
  • 我认为这不能正确回答这个问题,因为这个字符串可能永远不会在 HTML 上下文中使用。
  • @TNC,OP 提到想要 jQuery 的解决方案。对我来说,这意味着他正在寻找一种方法来使用 jQuery 或 Javascript 来做到这一点。但是考虑到大量 jQuery 用户正在做简单的 DOM 转换,我认为你是对的。
  • @TNC 如果字符串在 DOM 中,这很好,但如果你想在 Javascript 中用驼峰命名,这个答案显然是不正确的。
  • 这是一个糟糕的答案。它首先完成了提问者的要求,它不会对字符串进行驼峰化处理,它会改变文本的显示方式。有很多理由将您不想显示的虚线化字符串骆驼化,例如,当 jQuery 让您执行 .css('font-size', aSize) 来设置 .style.fontSize = aSize 时,它会这样做,这进一步使得假设 jQuery 公开一个方法是合理的这样做。即使更改显示是提问者想要的,由于browser bugs,它也不太可靠。
【解决方案3】:

在 jQuery 1.4+ 中(至少)你可以使用

var camelized = jQuery.camelCase("some-string");
// Returns "someString"

我上次查看文档时找不到它,但它在那里并在内部使用。

【讨论】:

【解决方案4】:

如果你想与世界上那些 TYPE IN ALL CAPS 的可怕人作斗争,同时还要大写它,你可以在这里使用最佳答案的这个变体:

function toTitleCase(str) {
        var lcStr = str.toLowerCase();
        return lcStr.replace(/(?:^|\s)\w/g, function(match) {
            return match.toUpperCase();
        });
    }

alert(toTitleCase("FOO BAR baz")); // alerts "Foo Bar Baz"

【讨论】:

    【解决方案5】:

    没有任何内置的 jQuery 可以做到这一点,但您可以查看这个有基本代码示例的网站:

    http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/

    String.prototype.toCamel = function(){
        return this.replace(/(\-[a-z])/g, function($1){return $1.toUpperCase().replace('-','');});
    };
    

    看起来你可以像这样调用代码:

    var str = "my string to camel case";
    str = str.toCamel();
    if ( typeof console !== 'undefined' ) console.log(str);
    

    【讨论】:

      【解决方案6】:

      更简单...
      您必须在替换中使用回调。

      toCamelCase = function(str){
        return str.replace(/-\w/g,function(match){return match[1].toUpperCase()})
      }
      // this works for css properties with "-" 
      // -webkit-user-select => WebkitUserSelect
      

      您可以将正则表达式更改为 /[-\s]\w/g 或 /(^|[-\s])\w/g 或其他...

      【讨论】:

        【解决方案7】:

        我知道这个问题有点老了,但是,

        这是我的 camelCase 函数版本:

        var camelCase = (function () {
            var DEFAULT_REGEX = /[-_]+(.)?/g;
        
            function toUpper(match, group1) {
                return group1 ? group1.toUpperCase() : '';
            }
            return function (str, delimiters) {
                return str.replace(delimiters ? new RegExp('[' + delimiters + ']+(.)?', 'g') : DEFAULT_REGEX, toUpper);
            };
        })();
        

        它处理以下所有边缘情况:

        • 默认处理下划线和连字符(可使用第二个参数配置)
        • 带有 unicode 字符的字符串
        • 以连字符或下划线结尾的字符串
        • 包含连续连字符或下划线的字符串

        这里是实时测试的链接:http://jsfiddle.net/avKzf/2/

        以下是测试结果:

        • 输入:“ab-cd-ef”,结果:“abCdEf”
        • 输入:“ab-cd-ef-”,结果:“abCdEf”
        • 输入:“ab-cd-ef--”,结果:“abCdEf”
        • 输入:“ab-cd--ef--”,结果:“abCdEf”
        • 输入:“--ab-cd--ef--”,结果:“AbCdEf”
        • 输入:“--ab-cd-__-ef--”,结果:“AbCdEf”

        请注意,以分隔符开头的字符串将导致开头为大写字母。 如果这不是您所期望的,您始终可以使用 lcfirst。 如果您需要,这是我的 lcfirst:

        function lcfirst(str) {
            return str && str.charAt(0).toLowerCase() + str.substring(1);
        }
        

        【讨论】:

          【解决方案8】:

          你也可以像这样实现一个纯javascript扩展方法:

          String.prototype.capitalize = function () {
          
              return this.toLowerCase().replace(/\b[a-z]/g, function (letter) {
                  return letter.toUpperCase();
              });
          };
          

          然后这样称呼它:

          "HELLO world".capitalize()
          

          【讨论】:

          • 不错,但它似乎与重音字符中断。
          【解决方案9】:
              function camelCase(str){
                  str     = $.camelCase(str.replace(/[_ ]/g, '-')).replace(/-/g, '');
                  return  str;//.substring(0,1).toUpperCase()+str.substring(1);
              },
          

          【讨论】:

            【解决方案10】:

            在 jquery 中使用内置的驼峰法:

            $.camelCase($("#text").html());
            

            【讨论】:

              【解决方案11】:
              <html>
              <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
              <script>
              $(document).ready(function () {
              
              
                 $('.clsToTitleCase').keyup(function () { 
              
                      this.value = this.value.replace(/(?:^|\s)\w/g, function (match) {
                         return match.toUpperCase();
                      })
              
                  });
              })
              </script>
              
              <body>
              
              <input class='clsToTitleCase' type='text'>
              </body>
              </html>
              

              【讨论】:

                【解决方案12】:

                你也可以使用这样的方法-

                toTitleCase: function (str) {
                        return str.replace(/\w\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });
                    }
                

                【讨论】:

                  【解决方案13】:

                  我稍微修改了 rBizzle 的代码。我不想搞乱世界上的 McClouds 和 McIntosh(我现在正在听凯尔特音乐!),所以我添加了一个条件,只修改 ALL CAPS 或 ALL 小写:

                  function isUpperCase(str) {
                      return str === str.toUpperCase();
                  }
                  
                  function isLowerCase(str) {
                      return str === str.toLowerCase();
                  }
                  
                  function toProperCase(str) {
                  	//only mess with it if it is all lower or upper case letters
                  	if (isUpperCase(str) || isLowerCase(str)){
                  	 	var lcStr = str.toLowerCase();
                      	return lcStr.replace(/(?:^|\s)\w/g, function(match) {
                         	 	return match.toUpperCase();
                      	});	
                  	} else {
                  		return str;
                  	}
                  }

                  我主要是试图与那些坚持对他们的数据条目大喊大叫的用户抗衡!内部数据是一回事,但是当客户要看到它时,我必须划清界限。

                  【讨论】:

                    猜你喜欢
                    • 2018-10-01
                    • 2015-10-08
                    • 2015-04-20
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多