如何在用戶輸入時將以#
字符開頭的所有單詞的顏色更改爲內容編輯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>
我想知道是否有這樣做的更有效的方法。此外,標籤必須由非標籤文本分隔的問題。我通過正則表達式運行我的正則表達式,它運行良好。
功能placeCaretAtEnd(EL)是由別人做,我沒有做到這一點。但它所做的只是將可讀性放在可編輯div的末尾。
如果您有問題,請給我留言
請幫幫我。
這個問題是非常非常非常非常一般。根本沒有答案。你在做什麼?你的架構是什麼?你在爲此要求一種「語言」?你做過什麼*了嗎? –
如果您不確定自己需要什麼語言,那麼請儘量予以尊重,然後a)不確定我們要向您指示的地方b)您的技能水平不可能高到不好,對不起!你可能想開始學習PHP ...... –
我編輯了我的問題,現在它更相關,更容易回答。請取消我的問題。 – nitrous