2014-01-20 199 views
-6

如何在用戶輸入時將以#字符開頭的所有單詞的顏色更改爲內容編輯div中的藍色。現在它所做的只是在所有的比賽中都是彩色的,但只有當它們是在沒有匹配的詞之後。就像這樣:正則表達式中的正則表達式標籤無法正常工作

#life隨機性#death更沒有#trees

但是,這並不工作:

我吃了一個蘋果#yum#doctoraway#healthy#diet

這裏有一個小提琴: http://jsfiddle.net/GEm75/

我現在這樣做的方式是由w在一個範圍內敲擊每個匹配,然後用css進行樣式設計。我遇到了一個問題,即hashtag之後的不匹配文本仍然與hashtag的顏色相同。我解決了這個問題,但效率很低,我迫切希望有一個替代方案。 這裏是我的代碼:

<div id="box" style="border: 1px solid black; height: 10em" contenteditable="true"> 
</div> 

function placeCaretAtEnd(el) { 
el.focus(); 
if (typeof window.getSelection != "undefined" 
    && typeof document.createRange != "undefined") { 
    var range = document.createRange(); 
    range.selectNodeContents(el); 
    range.collapse(false); 
    var sel = window.getSelection(); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
} else if (typeof document.body.createTextRange != "undefined") { 
     var textRange = document.body.createTextRange(); 
     textRange.moveToElementText(el); 
     textRange.collapse(false); 
     textRange.select(); 
    } 
} 

var inp = $('#box'); 
//select the box div 
var text = ''; 
//#box's default value 
inp.on('keyup', function(e) { 
    text = inp.html(); 
    var matches_hash = text.match(/(^|\s)#(\w+)/g); 
    if (matches_hash) { 
     text = text.replace(/(^|\s)#(\w+)/g, "</span><span class='hashtag'> #$2</span><span class='else'>"); 
     inp.html(text); 
     placeCaretAtEnd(document.getElementById('box')); 
    } 
}); 
</script> 

我想知道是否有這樣做的更有效的方法。此外,標籤必須由非標籤文本分隔的問題。我通過正則表達式運行我的正則表達式,它運行良好。

http://regex101.com/r/iF3iZ8

功能placeCaretAtEnd(EL)是由別人做,我沒有做到這一點。但它所做的只是將可讀性放在可編輯div的末尾。

如果您有問題,請給我留言

請幫幫我。

+0

這個問題是非常非常非常非常一般。根本沒有答案。你在做什麼?你的架構是什麼?你在爲此要求一種「語言」?你做過什麼*了嗎? –

+0

如果您不確定自己需要什麼語言,那麼請儘量予以尊重,然後a)不確定我們要向您指示的地方b)您的技能水平不可能高到不好,對不起!你可能想開始學習PHP ...... –

+0

我編輯了我的問題,現在它更相關,更容易回答。請取消我的問題。 – nitrous

回答

1

有很多方法可以做到這一點,但這是一種方式背後的想法。希望它能讓你的創意成果流動起來。

設置關係數據庫(可能爲MySQL)並創建一個post表來存儲帖子。比方說,post表有以下字段:

integer unsigned auto increment primary key id 
timestamp posted 
integer unsigned user_id 
text comment 

現在,你需要另一個表來存儲主題標籤。讓我們把這種hashtag和使用結構:

integer unsigned auto increment primary key id 
integer unsigned post_id 
text tag 

post_idhashtag表將指向你的post行的主題標籤屬於。現在,在MySQL中,你可以運行此查詢:

SELECT post.* FROM hashtag LEFT JOIN post ON post.id = post_id WHERE tag = "life"

這個查詢將獲取所有的職位與「生活」的主題標籤。

+0

謝謝。但我將如何突出鏈接。在臉書上,只要你在你的狀態下寫入#life,它就會在它周圍放上一個藍色框。我怎麼做? – nitrous

+0

使用Javascript在以「#」開頭的單詞周圍添加''標籤。然後使用CSS將鏈接設置爲您想要的顏色/字體。 –

相關問題