diff --git a/docs/input/appendix/emojis.md b/docs/input/appendix/emojis.md
index 9736348..364ffc9 100644
--- a/docs/input/appendix/emojis.md
+++ b/docs/input/appendix/emojis.md
@@ -35,4 +35,16 @@ var rendered = Emoji.Replace(phrase);
 _The images in the table below might not render correctly in your 
 browser for the same reasons mentioned in the `Compatibility` section._
 
-# EmojiTable /?>
\ No newline at end of file
+
+
+# EmojiTable /?>
+
+
\ No newline at end of file
diff --git a/docs/input/assets/js/emoji-search.js b/docs/input/assets/js/emoji-search.js
new file mode 100644
index 0000000..f0b82d3
--- /dev/null
+++ b/docs/input/assets/js/emoji-search.js
@@ -0,0 +1,30 @@
+$(document).ready(function () {
+    let input = document.getElementById('emoji-search');
+    let table = document.getElementById('emoji-results');
+
+    input.onkeyup = function (event) {
+
+        if (event.key === "Enter") {
+            event.preventDefault();
+            event.stopPropagation();
+            return false;
+        }
+
+        let value = input.value.toUpperCase();
+        let rows = table.getElementsByClassName('emoji-row');
+
+        for (let i = 0; i < rows.length; i++) {
+            let row = rows[i];
+
+            let match =
+                new RegExp(value, "i").test(row.textContent) ||
+                value === '';
+
+            if (match) {
+                row.style.display = 'table-row';
+            } else {
+                row.style.display = 'none';
+            }
+        }
+    }; // keyup
+}); // ready
\ No newline at end of file
diff --git a/docs/src/Shortcodes/EmojiTableShortcode.cs b/docs/src/Shortcodes/EmojiTableShortcode.cs
index 8c26f59..bc87260 100644
--- a/docs/src/Shortcodes/EmojiTableShortcode.cs
+++ b/docs/src/Shortcodes/EmojiTableShortcode.cs
@@ -18,8 +18,8 @@ namespace Docs.Shortcodes
                 .First().Object;
 
             // Headers
-            var table = new XElement("table", new XAttribute("class", "table"));
-            var header = new XElement("tr", new XAttribute("class", "emoji-row"));
+            var table = new XElement("table", new XAttribute("class", "table"), new XAttribute("id", "emoji-results"));
+            var header = new XElement("tr", new XAttribute("class", "emoji-row-header"));
             header.Add(new XElement("th", ""));
             header.Add(new XElement("th", "Markup"));
             header.Add(new XElement("th", "Constant"));
@@ -28,9 +28,9 @@ namespace Docs.Shortcodes
             foreach (var emoji in emojis)
             {
                 var code = emoji.Code.Replace("U+0000", "U+").Replace("U+000", "U+");
-                var icon = string.Format("{0};", emoji.Code.Replace("U+", string.Empty));
+                var icon = $"{emoji.Code.Replace("U+", string.Empty)};";
 
-                var row = new XElement("tr");
+                var row = new XElement("tr", new XAttribute("class", "emoji-row"));
                 row.Add(new XElement("td", icon));
                 row.Add(new XElement("td", new XElement("code", $":{emoji.Id}:")));
                 row.Add(new XElement("td", new XElement("code", emoji.Name)));