3

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

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

狐狸快要跳过栅栏了

我想看起来像:

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

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

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

4

2 回答 2

5

我修改了Greg Dean 在相关问题中的回答中的代码。

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

例子

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>
于 2013-02-28T03:24:52.773 回答
0

我刚刚修改了 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/

于 2013-02-28T03:16:23.133 回答