Stavo pensando che se vuoi ricavarti un metodo standard per setacciare una HTMLCollection puoi fare così:
codice:function HTMLStrictCollection(sElName, sElType) { Array.prototype.forEach.call(document.getElementsByTagName(sElName), function (oInputEl) { if (oInputEl.type === sElType) { Array.prototype.push.call(this, oInputEl); } }, this); } HTMLStrictCollection.prototype = HTMLCollection; function ottieniCollezione() { var oMiaCollezione = new HTMLStrictCollection("input", "password"); alert(oMiaCollezione.length); }Prova a utilizzare il metodo slice con una HTMLCollection, ad esempio così:Originariamente inviato da TrueLies
E' uguale Carlo - HTMLCollection è puristicamente più corretto ma all' atto pratico, per quel che ci devi fare, è una array. Chi usa getElementsByTagName fa uno scan con un ciclo, cioè utilizza l'oggetto come array: non esistono, sull' oggetto ritornato, operazioni che permettano di distinguere HTMLCollection da array.
Non funzionerà mai, perché una HTMLCollection non ha il metodo slice. Se vuoi applicarlo a una HTMLCollection dovrai fare così:codice:document.getElementsByTagName("input").slice(1, 3)
Ergo, una HTMLCollection è spesso interscambiabile con un'array, ma non sempre!codice:Array.prototype.slice.call(document.getElementsByTagName("input"), 1, 3)
Certo, ma c'è quasi sempre una via più performante di un'altra. Se non usi il metodo push sei costretto a leggere la proprietà length dell'array, che significa dispendio di processore. In un ciclo molto complesso può comportare tanto (prova a scrivere un programma di scacchi in javascript e ti assicuro che noterai la differenza!)Originariamente inviato da TrueLies
Per quello che riguarda il metodo push è questione di preferenze personali - per fortuna in programmazione c'è più di un modo di fare le cose.
Io personalmente (ma non pretendo che la mia posizione debba essere condivisa) non uso push sift pop e unshift per manipolare una array in quanto come metodi esistono, ma solo quando, nella array che manipolo, voglio rendere patente l'aspetto FIFO o LIFO - e non è questo il caso.
Ma se uno vuole può usare anche push se preferisce.
Sinceramente non capisco perché lo faiOriginariamente inviato da TrueLies
semmai, forse ti è sfuggita una altra cosa (ti vedo dell' umore di discutere di teoria, e a me sta bene e lo dico senza ironie!), che invece è singolare nel mio codice:
inputPassword[++inputPassword.length-1]
Noti nulla di strano?
Beh se no n noti nulla, te lo rivelo iobastava scrivere: [inputPassword.length]
Come mai prima incremento e poi decremento, operazione apparentemente futile?![]()
... se pensi di preallocare la memoria sei sulla strada sbagliata.
![]()

bastava scrivere: [inputPassword.length]
... se pensi di preallocare la memoria sei sulla strada sbagliata.
Rispondi quotando