npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

htmlparser3

v0.0.13

Published

HTML parser

Readme

htmlparser3

Based on htmlparser2 and supports htmlparser2's all features, but also support parsing jsx syntax。

With this, you can create your own template engine conveniently!

example

parse with Node.js: https://github.com/abell123456/htmlparser3/tree/master/demo/build-with-node
parse with React.js: https://github.com/abell123456/htmlparser3/tree/master/demo/react-parser

DEMO

const html = `
<Switch condition={"5"}>
    <div>555</div>
    <Case is={a>b} />
        <span>111</span>
    <Case is="2" />
        <span>222</span>
    <Default/>
        <span>I am showed now!</span>
</Switch>
`;

var parser = require('htmlparser3');
var fs = require('fs');

var ast = parser.parseDOM(html, {
    xmlMode: true
});


console.log('ast[0]:', ast[0]); // AST

ast[0].children.forEach(item => {
    console.log(item);
});

printAttrs(ast[0]);

// console.log('attr:', ast[0].attribs);


function printAttrs(ast) {
    if(ast.attrs && ast.attrs.length) {
        ast.attrs.forEach(attr => {
            console.log('attr:', attr);
        });
    }

    if(ast.children && ast.children.length) {
        ast.children.forEach(child => {
            printAttrs(child);
        });
    }
}

Output:

{ 
type: 'tag',
  name: 'Switch',
  attrs: [ { name: 'condition', value: '{"5"}', expression: '{"5"}' } ],
  children: 
   [ { data: '\n    ',
       type: 'text',
       next: [Object],
       prev: null,
       parent: [Circular] },
     { type: 'tag',
       name: 'div',
       attrs: [],
       children: [Object],
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { data: '\n    ',
       type: 'text',
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { type: 'tag',
       name: 'Case',
       attrs: [Object],
       children: [],
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { data: '\n        ',
       type: 'text',
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { type: 'tag',
       name: 'span',
       attrs: [],
       children: [Object],
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { data: '\n    ',
       type: 'text',
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { type: 'tag',
       name: 'Case',
       attrs: [Object],
       children: [],
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { data: '\n        ',
       type: 'text',
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { type: 'tag',
       name: 'span',
       attrs: [],
       children: [Object],
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { data: '\n    ',
       type: 'text',
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { type: 'tag',
       name: 'Default',
       attrs: [],
       children: [],
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { data: '\n        ',
       type: 'text',
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { type: 'tag',
       name: 'span',
       attrs: [],
       children: [Object],
       next: [Object],
       prev: [Object],
       parent: [Circular] },
     { data: '\n',
       type: 'text',
       next: null,
       prev: [Object],
       parent: [Circular] } ],
  next: 
   { data: '\n',
     type: 'text',
     next: null,
     prev: [Circular],
     parent: null },
  prev: null,
  parent: null }
{ data: '\n    ',
  type: 'text',
  next: 
   { type: 'tag',
     name: 'div',
     attrs: [],
     children: [ [Object] ],
     next: 
      { data: '\n    ',
        type: 'text',
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: null,
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ type: 'tag',
  name: 'div',
  attrs: [],
  children: 
   [ { data: '555',
       type: 'text',
       next: null,
       prev: null,
       parent: [Circular] } ],
  next: 
   { data: '\n    ',
     type: 'text',
     next: 
      { type: 'tag',
        name: 'Case',
        attrs: [Object],
        children: [],
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { data: '\n    ',
     type: 'text',
     next: [Circular],
     prev: null,
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ data: '\n    ',
  type: 'text',
  next: 
   { type: 'tag',
     name: 'Case',
     attrs: [ [Object] ],
     children: [],
     next: 
      { data: '\n        ',
        type: 'text',
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { type: 'tag',
     name: 'div',
     attrs: [],
     children: [ [Object] ],
     next: [Circular],
     prev: 
      { data: '\n    ',
        type: 'text',
        next: [Circular],
        prev: null,
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ type: 'tag',
  name: 'Case',
  attrs: [ { name: 'is', value: '{a>b}', expression: '{a>b}' } ],
  children: [],
  next: 
   { data: '\n        ',
     type: 'text',
     next: 
      { type: 'tag',
        name: 'span',
        attrs: [],
        children: [Object],
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { data: '\n    ',
     type: 'text',
     next: [Circular],
     prev: 
      { type: 'tag',
        name: 'div',
        attrs: [],
        children: [Object],
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ data: '\n        ',
  type: 'text',
  next: 
   { type: 'tag',
     name: 'span',
     attrs: [],
     children: [ [Object] ],
     next: 
      { data: '\n    ',
        type: 'text',
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { type: 'tag',
     name: 'Case',
     attrs: [ [Object] ],
     children: [],
     next: [Circular],
     prev: 
      { data: '\n    ',
        type: 'text',
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ type: 'tag',
  name: 'span',
  attrs: [],
  children: 
   [ { data: '111',
       type: 'text',
       next: null,
       prev: null,
       parent: [Circular] } ],
  next: 
   { data: '\n    ',
     type: 'text',
     next: 
      { type: 'tag',
        name: 'Case',
        attrs: [Object],
        children: [],
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { data: '\n        ',
     type: 'text',
     next: [Circular],
     prev: 
      { type: 'tag',
        name: 'Case',
        attrs: [Object],
        children: [],
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ data: '\n    ',
  type: 'text',
  next: 
   { type: 'tag',
     name: 'Case',
     attrs: [ [Object] ],
     children: [],
     next: 
      { data: '\n        ',
        type: 'text',
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { type: 'tag',
     name: 'span',
     attrs: [],
     children: [ [Object] ],
     next: [Circular],
     prev: 
      { data: '\n        ',
        type: 'text',
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ type: 'tag',
  name: 'Case',
  attrs: [ { name: 'is', value: '2' } ],
  children: [],
  next: 
   { data: '\n        ',
     type: 'text',
     next: 
      { type: 'tag',
        name: 'span',
        attrs: [],
        children: [Object],
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { data: '\n    ',
     type: 'text',
     next: [Circular],
     prev: 
      { type: 'tag',
        name: 'span',
        attrs: [],
        children: [Object],
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ data: '\n        ',
  type: 'text',
  next: 
   { type: 'tag',
     name: 'span',
     attrs: [],
     children: [ [Object] ],
     next: 
      { data: '\n    ',
        type: 'text',
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { type: 'tag',
     name: 'Case',
     attrs: [ [Object] ],
     children: [],
     next: [Circular],
     prev: 
      { data: '\n    ',
        type: 'text',
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ type: 'tag',
  name: 'span',
  attrs: [],
  children: 
   [ { data: '222',
       type: 'text',
       next: null,
       prev: null,
       parent: [Circular] } ],
  next: 
   { data: '\n    ',
     type: 'text',
     next: 
      { type: 'tag',
        name: 'Default',
        attrs: [],
        children: [],
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { data: '\n        ',
     type: 'text',
     next: [Circular],
     prev: 
      { type: 'tag',
        name: 'Case',
        attrs: [Object],
        children: [],
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ data: '\n    ',
  type: 'text',
  next: 
   { type: 'tag',
     name: 'Default',
     attrs: [],
     children: [],
     next: 
      { data: '\n        ',
        type: 'text',
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { type: 'tag',
     name: 'span',
     attrs: [],
     children: [ [Object] ],
     next: [Circular],
     prev: 
      { data: '\n        ',
        type: 'text',
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ type: 'tag',
  name: 'Default',
  attrs: [],
  children: [],
  next: 
   { data: '\n        ',
     type: 'text',
     next: 
      { type: 'tag',
        name: 'span',
        attrs: [],
        children: [Object],
        next: [Object],
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { data: '\n    ',
     type: 'text',
     next: [Circular],
     prev: 
      { type: 'tag',
        name: 'span',
        attrs: [],
        children: [Object],
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ data: '\n        ',
  type: 'text',
  next: 
   { type: 'tag',
     name: 'span',
     attrs: [],
     children: [ [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: [Object] },
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { type: 'tag',
     name: 'Default',
     attrs: [],
     children: [],
     next: [Circular],
     prev: 
      { data: '\n    ',
        type: 'text',
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ type: 'tag',
  name: 'span',
  attrs: [],
  children: 
   [ { data: 'I am showed now!',
       type: 'text',
       next: null,
       prev: null,
       parent: [Circular] } ],
  next: 
   { data: '\n',
     type: 'text',
     next: null,
     prev: [Circular],
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  prev: 
   { data: '\n        ',
     type: 'text',
     next: [Circular],
     prev: 
      { type: 'tag',
        name: 'Default',
        attrs: [],
        children: [],
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular],
        [Object] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } }
{ data: '\n',
  type: 'text',
  next: null,
  prev: 
   { type: 'tag',
     name: 'span',
     attrs: [],
     children: [ [Object] ],
     next: [Circular],
     prev: 
      { data: '\n        ',
        type: 'text',
        next: [Circular],
        prev: [Object],
        parent: [Object] },
     parent: 
      { type: 'tag',
        name: 'Switch',
        attrs: [Object],
        children: [Object],
        next: [Object],
        prev: null,
        parent: null } },
  parent: 
   { type: 'tag',
     name: 'Switch',
     attrs: [ [Object] ],
     children: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Circular] ],
     next: 
      { data: '\n',
        type: 'text',
        next: null,
        prev: [Circular],
        parent: null },
     prev: null,
     parent: null } 
}

新特性

  • [x] 支持JSX {}格式的表达式定义;
  • [x] 使用自定制domhandler3替换默认domhandler,支持更多方便的钩子函数及功能定制;
  • [x] 属性部分由原来的对象格式转变为:数组,并增添是否是表达式的判断属性;
  • [x] 表达式解析优化,支持:{alert(0)}{console.log(1)}两个标签并列书写,支持:{'<div>hello world<div>'}