 <p>I know this is a late answer, but if you can always use <a href="https://www.npmjs.org/package/sanitize-html" rel="nofollow">sanitize-html</a> It's written for node, but pretty sure you could run <a href="http://browserify.org/" rel="nofollow">browserify</a> against the library (or your code for that matter).</p> <p>Note, it uses lodash, so if you are already using it, then you may want to adjust the package.</p> <p>This example is more than you're looking for... I use this library in order to cleanup input code, converting to markdown for storage in the db from here, I re-hydrate via <a href="https://www.npmjs.org/package/marked" rel="nofollow">marked</a>.</p> <pre><code>// convert/html-to-filtered-markdown.js 'use strict'; var sanitize = require('sanitize-html') //https://www.npmjs.org/package/sanitize-html ,toMarkdown = require('to-markdown').toMarkdown ; module.exports = function convertHtmlToFilteredMarkdown(input, options) { if (!input) return ''; options = options || {}; //basic cleanup, normalize line endings, normalize/reduce whitespace and extra line endings var response = (input || '').toString().trim() .replace(/(\r\n|\r|\n)/g, '\n') //normalize line endings .replace(/“/g, '"') //remove fancy quotes .replace(/”/g, '"') //remove fancy quotes .replace(/‘/g, '\'') //remove fancy quotes .replace(/’/g, '\'') //remove fancy quotes ; //sanitize html input response = sanitize(response, { //don't allow table elements allowedTags: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol', 'nl', 'li', 'b', 'i', 'strong', 'em', 'strike', 'code', 'hr', 'br', 'div', 'table', 'thead', 'caption', 'tbody', 'tr', 'th', 'td', 'pre' ], //make orderd lists transformTags: { 'ol': 'ul' } }).replace(/\r\n|\r|\n/g,'\n') //normalize line endings; if (!options.tables) { response = response.replace(/[\s\n]*\&lt;(\/?)(table|thead|tbody|tr|th|td)\>[\s\n]*/g, '\n\n') //replace divs/tables blocks as paragraphs } //cleanup input further response = response .replace(/[\s\n]*\&lt;(\/?)(div|p)\>[\s\n]*/g, '\n\n') //divs and p's to simple multi-line expressions .replace(/\>#/g, '\n\n#') //cleanup #'s' after closing tag, ex: &lt;a>...&lt;/a>\n\n# will be reduced via sanitizer .replace(/\\s+\&lt;/,'&lt;') //remove space before a tag open .replace(/\>\s+\n?/,'>\n') //remove space after a tag close .replace(/\&?nbsp\;?/g,' ') //revert nbsp to space .replace(/\&lt;\h[12]/g,'&lt;h3').replace(/\&lt;\/\h[12]/g,'&lt;/h3') //reduce h1/h2 to h3 ; //convert response to markdown response = toMarkdown(response); //normalize line endings response = response .replace(/(?:^|\n)##?[\b\s]/g,'\n### ') //reduce h1 and h2 to h3 .replace(/(\r\n|\r|\n)/g, '\n') //normalize line endings .trim() return response + '\n'; }</code></pre>