2016-09-06 119 views
5

通過表情符號在工作我使用twemoji庫顯示在輸入字段的表情符號(contanteditable格):可編輯的div

<div contenteditable="true" id="input_div"></div> 

用戶可以使用外部按鈕添加表情符號,所以我可以把它添加到很簡單的div(讓不關心插入符的位置):

div.innerHTML += twemoji.parse(emoji); 

接下來,我需要從表情符號股利獲取用戶輸入,有沒有轉換回unicode字符一些簡單的方法是什麼?

我目前的解決方案here(我只是解析<img>讓alt屬性),但我認爲它看起來有點複雜,我無法用div.innerText屬性(相當方便擺脫DIV純文本),因爲我失去了表情符號, 。另外我使用div.getInnerText防止插入HTML或圖片來自剪貼板:

div.addEventListener("insert",() => {setTimeout(div.innerText = div.innerText,0)}) 
+0

您將會得到類似於可編輯元素innerHTML''的內容 - 因此您可以再次將它從img src中解析出來(查看「1F600」是您創建表情符號的代碼點,所以這似乎直接反映在圖像文件的名稱。) – CBroe

+0

@CBroe請參考我的鏈接,這正是我現在做的(我解析alt屬性,但它並不重要),對我來說,它看起來不方便,因爲我我使用div.innerText屬性來獲取乾淨的文本從div沒有任何html – Leo

+0

_「我解析alt屬性,但它並不重要」_ - 它確實很重要,如果alt屬性不包含你想要的。 'alt =「」' - 看到那個替換角色嗎? (這是從簡單地將innerHTML記錄到控制檯中複製而來的)。這很可能意味着您正在使用的庫已寫入屬性中,而不是有效的unicode代碼點。 (當我點擊「獲取文本」按鈕時,我在你的textarea下面看到完全相同的字符 - 所以你的代碼工作,它只適用於已經損壞的輸入數據。) – CBroe

回答

2

所以我創建了一個漂亮的twemoji標籤工作可編輯的div,就像WhatsApp的!

我編輯了Twemoji腳本,使其工作完美。很多工作夥計!

因此,這裏是fidddle

和代碼將Unicode轉換爲twemoji形象,切換標籤:

function convert() { 
    document.body.innerHTML = twemoji.parse(document.body.innerHTML); 
    } 
    convert(); 

    $(document).delegate('.emoji-header button', 'click', function() { 
    index = $(this).index() 
    $('.emoji-panel').css({ 
     'transform': 'translateX(-' + index + '00%)' 
    }); 
    }); 

    $('.emoji-panel .emojicon').on('click', function() { 
    $('.message').append($('img', this).clone()); 
    }); 
    $('.message').on('keypress', function(event) { 
    if (event.keyCode == 13 && !event.shiftKey) { 
     event.preventDefault(); 
    } 
    }); 

編碼快樂,順便大問題!

+0

看起來不錯!但是我發現了一個小問題,在解析輸入消息時可能會導致一些麻煩,只需將'.emojicon {font-size:35px;}'添加到css並嘗試在emoji字符後面輸入文本(因爲div.emojicon不會不知道你爲什麼需要它)。此外,它仍然不是原始問題的答案,至少我沒有看到它,您如何建議在點擊按鈕後發送消息? – Leo

+0

您必須明白,轉換爲圖像的Unicode字符不受font-size的影響。所以如果可編輯的div可以說'font-size 18px',你可以添加'.emojicon {height:1em;寬度:1em;}'到CSS,你解決了這個問題。要發送消息只需使用php或ajax,請確保該字段具有charset utf-8,當從數據庫中獲取此內容時,只需在此答案中使用convert()函數 –

+0

當然可以,但是您輸入的文本靠近'。 emojicon div'受其字體大小的影響,實際上是插入到'div.emojicon'中,並可能使消息解析更加複雜。爲了解決它,需要爲'div.emojicon'指定'contenteditable = false'。當我說'如何沙'我的意思是我仍然需要以某種方式將文本與emoji imgs轉換爲字符串,原始問題是關於這種轉換 – Leo