DEV Community

Cover image for Insert emojis
Phuoc Nguyen
Phuoc Nguyen

Posted on • Originally published at phuoc.ng

Insert emojis

Emoji is a visual representation of emotions, objects, or symbols. They're widely used in digital communication and have become an integral part of online conversations. Their importance lies in their ability to convey emotions and add context to text-based messages. With the rise of social media and messaging apps, emoji have become even more popular as they allow users to express themselves in a fun and engaging way.

Businesses have also started incorporating emoji into their marketing campaigns as a way to connect with younger audiences who are more likely to engage with visual content. Overall, emoji has become a crucial element of modern communication, and its importance in the web is undeniable.

In this post, we'll show you how to quickly insert an emoji into your text area by implementing a functionality that suggests emojis for users to choose from.

Updated data structure for emoji suggestions

In our previous post, we introduced a technique to suggest words based on the current word being typed. Now, we're taking it up a notch by using the same technique to suggest emojis when users type the ":" character. We'll be using a modified data model, but the approach is the same.

Instead of a list of keywords, our suggestions will now be a list of objects with two properties: symbol and name.

The symbol property represents the actual emoji, while the name property will be used to look up the corresponding emoji based on the keyword users typed.

Here's a sample code to illustrate the updated data structure:

const suggestions = [
    { symbol: "😀", name: "Grinning Face" },
    { symbol: "😃", name: "Smiling Face with Open Mouth" },
    { symbol: "😄", name: "Smiling Face with Open Mouth and Smiling Eyes" },
    { symbol: "😁", name: "Grinning Face with Smiling Eyes" },
    {
    symbol: "😆",
    name: "Smiling Face with Open Mouth and Tightly-Closed Eyes",
    },
    { symbol: "😅", name: "Smiling Face with Open Mouth and Cold Sweat" },
    { symbol: "🤣", name: "Rolling On The Floor Laughing" },
    { symbol: "😂", name: "Face with Tears of Joy" },
    { symbol: "🙂", name: "Slightly Smiling Face" },
    { symbol: "🙃", name: "Upside-Down Face" },
    ...
];
Enter fullscreen mode Exit fullscreen mode

Finding emojis

To adapt our approach to a new data structure, we need to make some changes to the input event handler.

First, we check if the word being typed is not empty and starts with a : character.

const currentWord = currentValue
    .substring(startIndex + 1, cursorPos)
    .toLowerCase();
if (currentWord === '' || !currentWord.startsWith(':')) {
    return;
}
Enter fullscreen mode Exit fullscreen mode

Next, we extract the keyword by removing the first : character.

const searchFor = currentWord.slice(1);
Enter fullscreen mode Exit fullscreen mode

Finally, we search for emojis with names similar to the keyword using the following sample code:

const matches = suggestions
    .filter((suggestion) => suggestion.name.toLowerCase().indexOf(searchFor) > -1)
    .slice(0, 10);
Enter fullscreen mode Exit fullscreen mode

Adding emojis to your text

In the previous post, clicking each suggestion item would insert the whole word into the editor. However, in this example, we will only insert the emoji symbol. To do this, we need to adjust the click event handler as follows:

const option = document.createElement('div');
option.innerHTML = `${match.symbol} ${match.name}`;
option.setAttribute('data-symbol', match.symbol);
option.classList.add('container__suggestion');

option.addEventListener('click', function () {
    replaceCurrentWord(this.getAttribute('data-symbol'));
    suggestionsEle.style.display = 'none';
});
Enter fullscreen mode Exit fullscreen mode

In this example, we have added a simple data-symbol attribute to each suggestion item, which sets the corresponding emoji using the setAttribute function. When users click on a suggestion, this attribute is retrieved using the getAttribute function, and the current word is replaced with the corresponding emoji.

Check out the final demo below to see how it works. Simply type the : character to see suggested emojis and start using them right away!


It's highly recommended that you visit the original post to play with the interactive demos.

If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!

If you want more helpful content like this, feel free to follow me:

Top comments (0)