diff --git a/src/nodes/html.ts b/src/nodes/html.ts index 2f796bb..1c128e8 100644 --- a/src/nodes/html.ts +++ b/src/nodes/html.ts @@ -598,6 +598,8 @@ export interface Options { comment?: boolean; } +const frameflag = 'documentfragmentcontainer'; + /** * Parses HTML and returns a root element * Parse a chuck of HTML source. @@ -610,6 +612,8 @@ export function parse(data: string, options = {} as Options) { const stack = [root]; let lastTextPos = -1; let match: RegExpExecArray; + // https://github.com/taoqf/node-html-parser/issues/38 + data = `<${frameflag}>${data}`; while (match = kMarkupPattern.exec(data)) { if (lastTextPos > -1) { if (lastTextPos + match[0].length < kMarkupPattern.lastIndex) { @@ -645,9 +649,12 @@ export function parse(data: string, options = {} as Options) { currentParent = arr_back(stack); } } - currentParent = currentParent.appendChild( - new HTMLElement(match[2], attrs, match[3])); - stack.push(currentParent); + if (match[2] !== frameflag) { + // ignore container tag we add above + // https://github.com/taoqf/node-html-parser/issues/38 + currentParent = currentParent.appendChild(new HTMLElement(match[2], attrs, match[3])); + stack.push(currentParent); + } if (kBlockTextElements[match[2]]) { // a little test to find next or ... const closeMarkup = ''; diff --git a/test/html.js b/test/html.js index 26cc404..ee4b84e 100644 --- a/test/html.js +++ b/test/html.js @@ -429,10 +429,12 @@ describe('HTML Parser', function () { }); describe('#removeAttribute', function () { - const root = parseHTML(''); - const input = root.firstChild; - input.removeAttribute('required'); - input.toString().should.eql(''); + it('should remove attribute required', function () { + const root = parseHTML(''); + const input = root.firstChild; + input.removeAttribute('required'); + input.toString().should.eql(''); + }); }); describe('#hasAttribute', function () { diff --git a/test/parse.js b/test/parse.js new file mode 100644 index 0000000..b6aa8e0 --- /dev/null +++ b/test/parse.js @@ -0,0 +1,13 @@ +const { parse } = require('../dist'); + +// https://github.com/taoqf/node-html-parser/issues/38 +describe('HTML Parser', function () { + it('should parse text element', function () { + const root = parse('foo bar
aaa
'); + root.toString().should.eql('foo bar
aaa
'); + }); + it('should parse pure text element', function () { + const root = parse('foo bar'); + root.toString().should.eql('foo bar'); + }); +})