Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!news.teledata-fn.de!newsfeed.arcor.de!newsspool2.arcor-online.net!news.arcor.de.POSTED!not-for-mail Content-Type: text/plain; charset="ISO-8859-1" Message-ID: <19917857.WJ4dUYIvN4@PointedEars.de> From: Thomas 'PointedEars' Lahn Reply-To: Thomas 'PointedEars' Lahn Organization: PointedEars Software (PES) Date: Sun, 18 Nov 2012 18:43:53 +0100 User-Agent: KNode/4.4.11 Content-Transfer-Encoding: 7Bit X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. <50a8c202$0$6565$9b4e6d93@newsspool4.arcor-online.net> <50A8E917.3070303@geeeemeil.com> Followup-To: comp.lang.javascript MIME-Version: 1.0 Lines: 64 NNTP-Posting-Date: 18 Nov 2012 18:43:55 CET NNTP-Posting-Host: 4d7cbe01.newsspool4.arcor-online.net X-Trace: DXC=nlh7RgG1DEjFXUDVUnEXQm4IUKK`nLCZKh];:6aKa;GWM;Jbbl X-Complaints-To: usenet-abuse@arcor.de Xref: csiph.com comp.lang.javascript:17293 Mattias Campe wrote: > Op 18-11-12 12:09, Martin Honnen schreef: >> Most DOM collections are "live" collections so it is difficult iterating >> over them while manipulating them. Your loop manipulates the class of >> elements and that way the collection changes while the loop is executed >> and that leads to elements being skipped as after setting >> alleOpvallendeAlineas[0].className >> that element is removed from the collection and the one that was at >> index 1 is now at index 0. And the next loop iteration changes >> alleOpvallendeAlineas[1] >> which is the third element in the original collection. >> >> One way to avoid that problem is working from the end of the collection >> e.g. >> for (var l = alleOpvallendeAlineas.length, i = l - 1; i >= 0; i--) { >> alleOpvallendeAlineas[i].className = ...; >> } > > I wouldn't have found that explanation myself, but it all makes sense, > once you know that :). So it's not a bug in the JS-engine after all ;). It could not have been a bug in "*the* JS-engine" because 1. There is no such thing. Netscape/Mozilla JavaScript (e.g. in Mozilla-based browsers, NES compatibles, B2G, and Firefox OS) is but one of several ECMAScript implementations. Other major implementations include JScript (e.g. in MSHTML/IE, with Windows Script Host, and on IIS), V8 (e.g. in Chromium/Google Chrome, on Android, and as base of node.js), Apple JavaScriptCore (e.g. in Safari, and on the iPhone/iPad), Opera ECMAScript (in Opera and Opera Mobile), and KDE JavaScript (e.g. in Konqueror): (to be updated) Despite the historic name of the newsgroup, all of those implementations are on-topic here and in similar newsgroups in other Usenet hierarchies. 2. The feature you are using here is not part of any ECMAScript implementation to begin with, but of a language-independent DOM API. You are merely using an implementation of that with ECMAScript implementations: Scripting a DOM using an ECMAScript implementation is on-topic here as well. That said, next time you should be slow(er) to declare something a bug without being sure, much less use the word "bug" that way in the message' Subject: , in particular . HTH PointedEars -- Danny Goodman's books are out of date and teach practices that are positively harmful for cross-browser scripting. -- Richard Cornford, cljs, (2004)