[Bug] SelectAll changes array of elements passed to it by reference
Opened this issue · 2 comments
IAkumaI commented
First of, select two elements. First - any. Second - child of the first element.
Then, just run SelectAll on this array.
Array (as any of js objects) passed by reference and css-select changes it somewhere.
Example:
const CSSselect = require('css-select');
const {parseDocument} = require('htmlparser2');
const dom = parseDocument('<div class="root"><div class="product"><h1></h1></div></div>');
const elements = CSSselect.selectAll('h1, .product', dom);
console.log(elements.length); // elements.length === 2
// elements contains both h1 AND .product (which are parent of h1)
CSSselect.selectAll('no matter', elements);
console.log(elements.length); // elements.length become 1
// elements contains only .product
IAkumaI commented
As I found, this happens after removeSubset() call:
Line 112 in 769d186
But. Is there normal to change original array?
fb55 commented
This works as expected, but should be documented. Thanks for raising the issue!