From 3cad5c435aa2333c39baa55a8bceb2b6bf1e2721 Mon Sep 17 00:00:00 2001 From: ac-mmi <79802170+ac-mmi@users.noreply.github.com> Date: Wed, 11 Sep 2024 03:48:53 +0530 Subject: Manipulation: Make jQuery.cleanData not skip elements during cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When passing a result of `getElementByTagsName` to `jQuery.cleanData`, convert it to an array first. Otherwise, a live NodeList is passed and if any of the event cleanups remove the element itself, a collection is modified during the iteration, making `jQuery.cleanData` skip cleanup for some elements. Fixes gh-5214 Closes gh-5523 Co-authored-by: Michał Gołębiowski-Owczarek Co-authored-by: Richard Gibson --- src/manipulation/getAll.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/manipulation/getAll.js b/src/manipulation/getAll.js index db876202d..86526a256 100644 --- a/src/manipulation/getAll.js +++ b/src/manipulation/getAll.js @@ -1,5 +1,6 @@ import { jQuery } from "../core.js"; import { nodeName } from "../core/nodeName.js"; +import { arr } from "../var/arr.js"; export function getAll( context, tag ) { @@ -8,7 +9,9 @@ export function getAll( context, tag ) { var ret; if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); + + // Use slice to snapshot the live collection from gEBTN + ret = arr.slice.call( context.getElementsByTagName( tag || "*" ) ); } else if ( typeof context.querySelectorAll !== "undefined" ) { ret = context.querySelectorAll( tag || "*" ); -- cgit v1.2.3