2016-09-06 14 views
5

Używam twemoji bibliotekę wyświetlanie emotikonów w polu tekstowym (contanteditable dz):Praca z emotikonami w edytowalny div

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

użytkownik może dodawać emotikony za pomocą przycisku zewnętrznego, więc mogę go dodać do dział po prostu (pozwala nie dbają o położeniu karetki):

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

następny trzeba uzyskać dane wejściowe użytkownika z div z emotikonami, czy jest jakiś prosty sposób przekonwertować z powrotem do znaków unicode?

moje obecne rozwiązanie here (ja po prostu analizować <img> aby atrybut alt), ale myślę, że to wygląda trochę trudne i nie mogę używać div.innerText własność (dość wygodne, aby dostać tekst z div) bo ja straciłem emotikony . Również używam div.getInnerText aby zapobiec włożeniem HTML lub obrazów ze schowka:

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

Otrzymasz coś takiego z powrotem jako innerHTML edytowalnego elementu, '' - abyś mógł ponownie go sparsować z pliku img src (widząc, że '1F600' jest punktem kodowym, z którego tworzysz emoji, więc wydaje się, że jest to bezpośrednio odzwierciedlone w nazwie pliku obrazu.) – CBroe

+0

@ CBroe, proszę odnieść mój link do plunkera, który jest dokładnie taki jak teraz (analizuję atrybut alt, ale to nie ma znaczenia), a dla mnie wygląda niewygodnie, ponieważ używam właściwości div.innerText, aby uzyskać czysty tekst z div bez żadnego html – Leo

+0

_ "Analizuję atrybut alt, ale to nie ma znaczenia" _ - ma to znaczenie, jeśli atrybut alt nie zawiera tego, co chcesz. 'alt =" "' - czy widzisz tam zastępczą postać? (To jest skopiowane z prostego logowania innerHTML do konsoli.) To najprawdopodobniej oznacza, że ​​biblioteka, której używasz, zapisała do atrybutu, nie jest poprawnym punktem kodowania Unicode. (Widzę dokładnie tę samą postać pod twoim tekstem, gdy kliknę przycisk "pobierz tekst" - więc twój kod działa, działa tylko na danych wejściowych, które już zostały uszkodzone.) – CBroe

Odpowiedz

2

Więc stworzyłem pracę edycji div z piękną kartę twemoji, podobnie jak WhatsApp!

Dokonałem edycji skryptu Twemoji, aby działał idealnie. DUŻO CZŁOWIEKA!

Więc tutaj jest fidddle

i kod do konwersji unicode do obrazu twemoji i przełączyć zakładki:

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(); 
    } 
    }); 

Szczęśliwy kodowanie, wielkie pytanie przy okazji!

+0

Wygląda świetnie! Ale znalazłem mały problem, który może powodować pewne problemy podczas przetwarzania wiadomości, wystarczy dodać '.emojicon {font-size: 35px;}' do css i spróbować wpisać tekst zaraz po znaku emoji (to z powodu div.emojicon wykładowca nie wiem dlaczego tego potrzebujesz). Również nadal nie jest odpowiedzią na oryginalne pytanie, przynajmniej go nie widzę, jak sugerujesz wysłać wiadomość po kliknięciu przycisku? – Leo

+0

Musisz zrozumieć, że czcionka nie ma wpływu na znak Unicode przykryty obrazem. Więc jeśli edytowalny div ma powiedzmy 'rozmiar-czcionki 18px', możesz dodać' .emojicon {height: 1em; width: 1em;} 'to css i naprawiłeś ten problem. Do wysłania wiadomości wystarczy użyć php lub ajax, upewnij się, że pole ma zestaw znaków UTF-8, podczas pobierania tej zawartości z bazy danych po prostu użyj funkcji convert() w tej odpowiedzi –

+0

Oczywiście, ale tekst, który wpisujesz w pobliżu '. emojicon div' ma wpływ na rozmiar czcionki i faktycznie jest wstawiany do 'div.emojicon' i może sprawić, że przetwarzanie wiadomości będzie bardziej skomplikowane. Aby go rozwiązać, należy podać 'contenteditable = false' dla' div.emojicon'. Kiedy mówiłem "jak zacisnąć" mam na myśli to, że nadal potrzebuję jakoś przekonwertować tekst z emoji-img na ciąg znaków, pierwotne pytanie dotyczy takiej konwersji – Leo