大写页面上的特定单词

时间:2012-06-01 18:44:03

标签: javascript jquery html css css3

我有你的典型MVC3应用程序,有很多CRUD页面。在这些页面中有很多带有Id列的列表......客户今天告诉我他们总是希望看到“ID”而不是“Id”,但字段通常更完全合格(IE:“Job Id”或东西)

有没有办法,用css,文本只转换文本的“Id”部分(到所有大写)而不添加任何额外的HTML?

我认为解决方案的一部分涉及这个伪类:div:contains(“Id”)但我不确定它是否可行...

我也不介意用wquery做这个,但我正在努力减少重构。

5 个答案:

答案 0 :(得分:3)

根据其他答案,这里是有效替换的简短版本:

$("h3").text(function() {
    return $(this).text().replace(/\b(id)\b/gi, "ID");
});​

DEMO: http://jsfiddle.net/bcAyP/

答案 1 :(得分:2)

您不能将CSS样式应用于单个单词,仅适用于元素。这意味着您需要拥有其他HTML。否则,它可以在jQuery中完成。

$("h3").each(function() {
    var title = $(this).text();
    title = title.replace(/\bid\b/gi, "ID");
    $(this).text(title);
});

Live example

答案 2 :(得分:2)

您不能将CSS应用于特定单词,仅应用元素(或CSS定义的一小组伪元素)。这是一个基于JavaScript的解决方案,永远不会影响您的标记:

演示:http://jsfiddle.net/6LRWC/2/

function replaceTextUnder(node,pattern,str){
  var t, walk=document.createTreeWalker(node,NodeFilter.SHOW_TEXT,null,false);
  while(t=walk.nextNode()){
    t.nodeValue = t.nodeValue.replace(pattern,str);
  }
}

replaceTextUnder(document.body, /\bid\b/gi, "ID" );

或者,在这里它被包装成一个jQuery插件:

jQuery.fn.replaceInText = function(pattern,str){
  return this.each(function(){
    var t, walk=document.createTreeWalker(this,NodeFilter.SHOW_TEXT,null,false);
    while(t=walk.nextNode()) t.nodeValue = t.nodeValue.replace(pattern,str);
  });
};

$('li,td,th').replaceInText( /\bid\b/gi, "ID" );​

答案 3 :(得分:0)

要对抗内部比赛,请使用以下内容:

$("h3").each(function() {
    $(this).text($(this).text().replace(/\sId/g, "ID"));
});​

这当然假设id总是像你的描述一样大写。

答案 4 :(得分:-1)

http://jsfiddle.net/HZVs8/

先生,先生。

$("body").html(function(i, t) {
return t.replace(/( id)/g, " ID");
});​

你需要注意的是,你必须确保“id”在jQuery中有一个空格,否则,这段代码会找到其中包含“id”的每个文本字符串将其转换为“ID”。

如果您遇到的问题是文本是这样的:“ProjectId”,您希望它像这样:“ProjectID”然后使用此代码:

$("body").html(function(i, t) {
return t.replace(/(Id)/g, " ID");
});

基本上,您选择的文字区分大小写。只需确保选择正确的代码段,或者选择带有“id”的每个单词并将其设为“ID”并且您不希望这样。

与我制作的JSFiddle混在一起。它有效。