taoqf / node-html-parser

A very fast HTML parser, generating a simplified DOM, with basic element query support.
MIT License
1.11k stars 107 forks source link

Add replaceWith method to text node #271

Open McFizh opened 6 months ago

McFizh commented 6 months ago

Would it be possible to have replaceWith method added to next nodes. Example use case:

Text node has content 'word1 word2 word3' and I would like to replace it with for example the following html:

'word1 <b>word2</b> word3'

This would be really easy to do with:

node.replaceWith('word1 <b>word2</b> word3');

taoqf commented 6 months ago

Yes, it should. I guess you want this do :

const root = parse('word1 word2 word3');
root.replaceWith('word1 <b>word2</b> word3');
root.toString().should.eql('word1 <b>word2</b> word3');

But it doen't, actually, the node wont change after calling replaceWith, and the method replaceWith return the node itself. you can try this:

const root = parse('<div>word1 word2 word3</div>');
const div = root.querySelector('div');
div.replaceWith('<div>word1 <b>word2</b> word3</div>');
root.toString().should.eql('<div>word1 <b>word2</b> word3</div>');