> A JS library for converting HTML to Markdown.[中文](./README.md) --- [![Build Status](https://travis-ci.org/stonehank/html-to-md.svg?branch=master)](https://travis-ci.org/stonehank/html-to-md) [![npm](https://img.shields.io/npm/v/html-to-md.svg)](https://www.npmjs.com/package/html-to-md) [![codecov](https://codecov.io/gh/stonehank/html-to-md/branch/master/graph/badge.svg)](https://codecov.io/gh/stonehank/html-to-md) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/html-to-md.svg) ![](https://img.shields.io/badge/dependencies-0-brightgreen) ### Feature - speed, none of dependencies, `gizp` 10kb - support `nodeJs` - 200+`unit test` and `module test`, code coverage `97%` > Only valid HTML will be output correctly, eg. `

abc<`, `abc` are **Not Valid** text. ### Live Demo [live-demo](https://stonehank.github.io/html-to-md/) ### Useage ##### install `npm i html-to-md` ##### example ```js const html2md = require('html-to-md') // or if you're using ES6 import html2md from 'html-to-md' console.log(html2md('strong and italic', options)) // ***strong and italic*** ``` ### Config(Optional): #### options:
name date type default value description
skipTags Array
[
  'div',
  'html',
  'body',
  'nav',
  'section',
  'footer',
  'main',
  'aside',
  'article',
  'header'
]
Declare which tags need to skip
emptyTags Array [] Skip all the tags inside it
ignoreTags Array
[
  '',
  'style',
  'head',
  '!doctype',
  'form',
  'svg',
  'noscript',
  'script',
  'meta'
]
Ignore all tag and content inside the tag
aliasTags Object
{
  figure :'p',
  figcaption:'p',
  dl:'p', 
  dd:'p', 
  dt:'p'
}
Define an alias tag name
renderCustomTags   Boolean
|'SKIP'
|'EMPTY'
|'IGNORE'
true Define how to render not valida HTML tags
  • true: render all custom tags
  • false | SKIP: render as skipTags
  • EMPTY: render as emptyTags
  • IGNORE: render as ignoreTags
tagListener Function (tagName: String, props: TagListenerProps): TagListenerReturnProps => props Custom the tag props
> Priority:skipTags > emptyTags > ignoreTags > aliasTags Example: ```javascript html2md('<>abc', { ignoreTags: [''] }) // '' html2md('<>abc', { skipTags: [''] }) // ***abc*** html2md('<>abc', { emptyTags: [''] }) // abc html2md('<>abc', { skipTags: [''], aliasTags: { b: 'ul', i: 'li' }, }) // * abc html2md('abc', { renderCustomTags: 'SKIP' }) // ***abc*** ``` #### force(Boolean)(Default value is false) | value | description | | :---: | :---------------------------------------------------------------: | | true | Overwrite by your custom options | | false | Use `Object.assign` to combine custom options and default options | Example: ```javascript // The default skipTags value is ['div','html','body'] // ex1: html2md('

abc
', { skipTags: ['b'] }, false) // skipTags value become ['div','html','body','b'] // ex2: html2md('
abc
', { skipTags: ['b'] }, true) // skipTags value become ['b'] ``` #### TagListenerProps | key | 说明 | | ------------- | ------------------------------------------------------------ | | parentTag | parent tag nam, `null` if not exist | | prevTagName | previous tag name, `null` if not exist | | nextTagName | next tag name, `null` if not exist | | isFirstSubTag | if the current tag is the first tag of its parent tag | | attrs | tag's attributes, format as object, e.g. `{ src, href ... }` | | innerHTML | inner html string | | match | the match symbol of markdown for current tag | | language? | language for `pre` tag | | isSelfClosing | is the tag a self-closing tag | #### TagListenerReturnProps | key | 说明 | | --------- | ------------------------------------------------------------ | | attrs | tag's attributes, format as object, e.g. `{ src, href ... }` | | match | the match symbol of markdown for current tag | | language? | language for `pre` tag | ### Support Tags - `a` - `b` - `blockquote` - `code` - `del` - `em` - `h1~h6` - `hr` - `i` - `img` - `input` - `li` - `ol` - `p` - `pre` - `s` - `strong` - `table` - `tbody` - `td` - `th` - `thead` - `tr` - `ul`