2011-08-31 73 views
1

我有以下標籤元素,我想將星號標記爲紅色。爲標籤中的子串着色

<label> Lastname * </label> 

這怎麼能用jQuery來完成呢?

+0

你接受HTML + CSS作爲「或其他」答案嗎? – JJJ

+0

你可能會更好,只是用一些CSS樣式來包裝它,並且一起跳過所有的javascript。除非有一個特定的原因,你希望這是在頁面呈現後完成的...... – Dan

回答

2
var label = document.getElementById('labelId'); 
label.innerHTML = label.innerHTML.replace('*', '<span style="color:red;">*</span>'); 

沒有組件(又名jQuery的)需要:-)

1

你可以用jQuery做,如果你想

$('#labelId').html($('#labelId').text().replace('*', '<span style="color:red;">*</span>')); 
+0

lol爲什麼'.text()'和'.html()'的混合? – Neal

+0

嗯,對,都可以是'.html()':) – szajmon

+0

或兩者都可以是'text()' – Neal

1

如果你可以改變文本,CSS可能是一個更好的選擇:http://jsfiddle.net/VwLQM/

label:after { 
    color: red; 
    content: "*"; 
} 

然後<label>test</label>將自動具有後有一個紅色的*

:after確實not fully work on IE8,所以這可能是一個重要的事情要考慮。

+2

這將** **不適用於所有瀏覽器。 – Neal

+0

@Neal:雖然這是正確的。 – pimvdb

+0

我從來沒有說過它不是 - 但你應該說瀏覽器的限制 – Neal

0

雖然這可能有點複雜,它確實會給你一個小小的擺動空間來標記元素中的紅色星號,而不僅僅是文本內部的文本,並且可能會在不同的瀏覽器中給你帶來更少的麻煩。

http://jsfiddle.net/QjJmT/

$(function(){ 

    var elements = $('label'); 
    var markup_element = $('<span class="red">*</span>'); 

    elements.each(function(){ 

     //wrap the element in a jquery object and get it's text string 
      var element = $(this);  
      var element_text = element.text(); 

     //use regex to use the * as a delimeter 
      var other_parts = element_text.split(/\*/); 

     //empty the element re-add each part programmatically 
      element.empty(); 
      for(var i = 0; i < other_parts.length; i++){ 
       element.append(other_parts[i]); 
       if(i != other_parts.length - 1){ 
        element.append(markup_element); 
       } 
      } 

    }); 

}); 

希望幫助!