diff --git a/src/nodes/html.ts b/src/nodes/html.ts index 2215a1d..6dbe9d3 100644 --- a/src/nodes/html.ts +++ b/src/nodes/html.ts @@ -131,6 +131,7 @@ export default class HTMLElement extends Node { super(parentNode); this.rawTagName = tagName; this.rawAttrs = rawAttrs || ''; + this.id = keyAttrs.id || ''; this.childNodes = []; this.classList = new DOMTokenList( keyAttrs.class ? keyAttrs.class.split(/\s+/) : [], @@ -139,7 +140,6 @@ export default class HTMLElement extends Node { ) ); if (keyAttrs.id) { - this.id = keyAttrs.id; if (!rawAttrs) { this.rawAttrs = `id="${keyAttrs.id}"`; } @@ -609,6 +609,10 @@ export default class HTMLElement extends Node { } return `${name}=${val}`; }).join(' '); + // Update this.id + if (key === 'id') { + this.id = ''; + } } public hasAttribute(key: string) { @@ -653,6 +657,10 @@ export default class HTMLElement extends Node { } return `${name}=${val}`; }).join(' '); + // Update this.id + if (key === 'id') { + this.id = value; + } } /** diff --git a/test/112.js b/test/112.js new file mode 100644 index 0000000..263cab6 --- /dev/null +++ b/test/112.js @@ -0,0 +1,39 @@ +const { parse, HTMLElement } = require('../dist'); + +// https://github.com/taoqf/node-html-parser/pull/112 +describe('pull/112', function () { + it('this.id is set to an empty string', async function () { + const el = new HTMLElement('div', {}, '', null); + el.id.should.eql('') + should.equal(el.getAttribute('id'), undefined); + el.toString().should.eql('
'); + }); + it('this.id is set to the value of keyAttrs', async function () { + const el = new HTMLElement('div', { id: 'id' }, 'id="id"', null); + el.id.should.eql('id') + el.getAttribute('id').should.eql('id') + el.toString().should.eql('
'); + }); + it('#removeAttribute()', async function () { + const html = '
'; + const root = parse(html); + const el = root.firstChild; + el.id.should.eql('id') + el.getAttribute('id').should.eql('id') + el.removeAttribute('id') + el.id.should.eql('') + should.equal(el.getAttribute('id'), undefined); + el.toString().should.eql('
'); + }); + it('#setAttribute()', async function () { + const html = '
'; + const root = parse(html); + const el = root.firstChild; + el.id.should.eql('') + should.equal(el.getAttribute('id'), undefined); + el.setAttribute('id', 'id') + el.id.should.eql('id') + el.getAttribute('id').should.eql('id') + el.toString().should.eql('
'); + }); +});