【问题标题】:Transform ALL CAPS to Proper Case using CSS and jQuery使用 CSS 和 jQuery 将所有大写字母转换为正确大小写
【发布时间】:2013-02-28 02:33:52
【问题描述】:

我正在尝试做类似于此线程https://stackoverflow.com/a/3471258/2117845 的事情 我想我想要像 Harmen 这样的 jquery 代码发布并说它现在是一个插件?

我所拥有的是来自数据库的所有大写标题。例如:

狐狸快要跳过栅栏了

我想看起来像:

快速的棕色狐狸即将跳过栅栏

那么有没有办法使用 CSS 和 jQuery 来转换文本并消除某些单词被制作成正确的大小写?但我想我需要保留第一个实例。就像我去掉“the, is, to and”一样,标题中的第一个“the”将全部小写。那么我是否能够以某种方式消除那些不是第一个单词的常用词?

我知道这很多,但我对 jQuery 不是很熟悉。是否有任何教程或插件显示如何执行此类操作。我已经看到很多关于如何转换 ALL CAPS 文本的问题,所以一个解决方案可能会非常有用。

【问题讨论】:

  • 这应该会有所帮助,但不会处理小写的is, to, the stackoverflow.com/questions/196972/…
  • 您必须参考一些词库或词性库才能准确地完成此操作。我会寻找更好的解决方案。
  • @MattBusche 该帖子确实有所帮助,但我希望有一个 jQuery 解决方案来转换例如无序列表中的所有链接。根据你提到的帖子,我也在 GitHub 上找到了这个 - github.com/gouch/to-title-case。但我仍然希望找到一个 jquery 解决方案。我没有足够的知识来使用该javascript并将其转换为jquery。不过我敢肯定有办法。
  • 如果信息来自数据库,使用服务器端语言进行转换会比 jQuery 更快/更高效。 PHP 有一个名为ucwords 的函数,它几乎可以满足您的需求,但用任何其他语言制作类似的函数并不难。 php.net/manual/en/function.ucwords.php#84920

标签: jquery css


【解决方案1】:

我修改了Greg Dean's answer in a related question.的代码

我认为这个算法充其量只是一个有根据的猜测,因为它实际上并没有评估英文大写规则。您可能需要在 noCaps 列表中添加更多单词以获得更好的准确性。

Example

JS

var ele = $('p'); 
ele.text(toProperCase(ele.text())); 

function toProperCase(str)
{
    var noCaps = ['of','a','the','and','an','am','or','nor','but','is','if','then', 
'else','when','at','from','by','on','off','for','in','out','to','into','with'];
    return str.replace(/\w\S*/g, function(txt, offset){
        if(offset != 0 && noCaps.indexOf(txt.toLowerCase()) != -1){
            return txt.toLowerCase();    
        }
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
}

HTML

<p>THE QUICK BROWN FOX IS ABOUT TO JUMP OVER THE FENCE</p>

【讨论】:

  • 谢谢布兰登!这正是我正在寻找的。​​span>
  • 我遇到了这个问题...我在
      中有我的标题列表,所以在 jquery 中而不是 ('p') 我放了 ('ul.proper-case李一')。但由于某种原因,它会重复每个 li 并将所有 li 添加到每个 li 中。那么我该如何防止这种情况发生。我假设这是对 js 文件的快速更改?
  • 是的!这就对了。非常感谢!我知道必须在某个地方添加一个 .each ,但我只是不知道该怎么做。感谢您的帮助!
  • 我又遇到了一件我需要添加到 javascript 中的东西。每当出现 mdash 时,mdash 之前或之后通常都没有空格,因此 mdash 之后的单词应该大写,但它目前是小写的。你能告诉我在哪里添加一行,以便在 mdash 之后的第一个字母是 Cap 吗?我认为它可能会出现在 if then 语句中,但我不知道如何将它放在那里。
  • 听起来像是一个单独的问题。我现在没有时间看,但是如果你创建一个新问题,引用这个问题,你会从其他用户那里获得更多的曝光和输入。谢谢!
【解决方案2】:

我刚刚修改了 Harmen 的代码以满足您的需求。把它放在你的 JS 文件中。

jQuery.fn.ucwords = function() {
   return this.each(function(){
      var val = $(this).text().toLowerCase(), newVal = '';
      val = val.split(' ');

      for(var c=0; c < val.length; c++) {
         if (c>0 && val[c]=="is" || c>0 && val[c]=="to" || c>0 && val[c]=="the"){
             newVal+=val[c]+' ';
         } else newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length) + (c+1==val.length ? '' : ' ');

      }
      $(this).text(newVal);
  });
}

$(document).ready(function(e) {
    $('p.link').ucwords();
});

示例的 HTML

<p class="link">THE QUICK BROWN FOX IS ABOUT TO JUMP OVER THE FENCE</p>

和 JSFiddle 为您服务http://jsfiddle.net/fqEvX/

【讨论】:

  • 非常感谢您的帮助 Omer。它工作得很好。我想我可能会使用 Brandon Boone 的代码,但单词列表似乎更容易维护和添加。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 2015-07-28
  • 1970-01-01
相关资源
最近更新 更多