第一個是在 textarea 輸入框中添加固定的內容。
代碼如下:
<textarea id="text" cols="30" rows="10"></textarea> <br> <button id="btn">添加公司</button>
var textareaIndex = 0; $("#text").on('keydown',function(e){ textareaIndex = this.selectionStart+1; if(e.keyCode == 8){ var starText,endText,replaceText; var text = $(this).val(); var selectionIndex = this.selectionStart-1; if(text[selectionIndex]==']'){ var result = rep(text,selectionIndex); $(this).val(result.text); this.selectionStart = this.selectionEnd = result.index; return false; } } }) $("#text").click(function(){ textareaIndex = this.selectionStart; // 獲取光標所在下標 }) function rep(str,index){ var i = index,k='no'; while(i>0){ if(str[--i]=='['){ k = i; break; } } if(k=='no')k=index return {text:str.substring(0,k)+str.substring(index+1),index:k} } $('#btn').click(function(){ var text = $("#text").val(); var str = text.substring(0,textareaIndex); var texts = str + '[公司名稱]' + text.substring(textareaIndex,text.length); $("#text").val(texts); })
效果在此就不展示了。(不過到最后並不能滿足大部分需求所以並沒有使用這種方法,使用的是 HTML 5 的新屬性 contenteditable)。
第二個是研究聊天發表情,是為了實現微信端和小程序端的互相通信,過程中碰到種種困難,尤其是小程序端,所以想到將帶表情的內容改變成一個數組形式發送。
代碼如下:
var str = '你好,#微笑;1。加油兄弟#握手;#的哈哈但是.#所屬;'; function f(str){ var arr = [],tmp = ''; for(var i=0,l=str.length;i<l;i++){ if(str[i]=='#'&&tmp){ arr.push(tmp); tmp = ''; } tmp+=str[i]; if(str[i]==';'&&tmp[0]=='#'){ arr.push(tmp); tmp = ''; } } if(tmp)arr.push(tmp) return arr; } var data = f(str); console.log(data) // ["你好,", "#微笑;", "1。加油兄弟", "#握手;", "#的哈哈但是."]
允悲,這種方法是可以實現想要的效果的,只不過有點麻煩,尤其是小程序端,不過最后並沒有使用這種方法(原因是發現現在的輸入法自帶表情,不僅表情全而且無需做任何處理)