JavaScript hivás egérmozgással szemetes kód nélkül
Syastox!
Nem igazi "probléma" csak szépséghiba
Adott egy <div>ünk, benne sok kicsi <div> listaszerűen. Ezekkel a kis listaelemekkel lenne problemám.
Ugyanis szinte minden egér-eventhez köthető valami JavaScript történés.
Valahogy igy:Simpla CODE:
■ Nem igazi "probléma" csak szépséghiba
Adott egy <div>ünk, benne sok kicsi <div> listaszerűen. Ezekkel a kis listaelemekkel lenne problemám.
Ugyanis szinte minden egér-eventhez köthető valami JavaScript történés.
Valahogy igy:
<div>
<div>
<a onclick="itemwear()" ondblclick="itemdrop()" onmouseout="hideinfo()" onmouseover="showinfo()">
Database datas
</a>
</div>
<div>
<a onclick="itemwear()" ondblclick="itemdrop()" onmouseout="hideinfo()" onmouseover="showinfo()">
Database datas
</a>
</div>
</div>
Természetesen ez nem a teljes kód, csak lecsupaszitottam a problémára.
A két DIV sem csak 2 lenne hanem aggasztóan sok, csak felesleges copyznom érti mindenki.
Az a gondom velük h nem-e lehetne megoldani valahogy azt, h ne kelljen minden sorban leirnom a JS hivást? Akármire vevő vagyok.
A kód formázva van CSS-el, PHP generált MySQL adatbázissal. Ajax módszerrel kommunikál. Szóval van kód rendesen. És ha egy mód lenne rá akkor lecserélném h (ez most hülyeség lesz de igy lenne a legfrappánsabb)
CSS-t neki:
[colorer=css]
#mouse
onclick="itemwear()" ondblclick="itemdrop()" onmouseout="hideinfo()" onmouseover="showinfo()"
<div>
<a >
<div id=mouse>
Database datas
</div>
<div id=mouse>
Database datas
</div>
</div>
Auch
A "class" tulajdonságot
getElementsByTagName
-el.Nem használom
Az a cink h egértevékenységet kell figyelni minden egyes kis DIVben.
getElementsByTagName-el úgy tudom ez nem megoldható... De amien szinten van még a JS tudásom mindent elhiszek :D A kérdés csak az h hogyan?
JavaScript + bubbling
getElementsByTagName
,className
). Vagy kihasználhatod az event bubbling-ot és a szülőhöz adod hozzá az eseménykezelőt, és onnan figyeled, mi volt az esemény eredeti célpontja.o.O
Köszi!
Meglesz ez
Merugye legyen már válasz a saját témámra :D
Szóval a Bubblemicsoda elkalauzolt az addeventlistener -hez (FTW? LoL)
AMiből kisütöttem valami iesmit:
A-A
De most elteszem magam holnapra majd folytatom
Például, hogy nem id-t
Naa nemá, túl sokat segítesz
bocs.. :)
Dehogynem, de azóta
(Nincs téma)
LoL
<3
Reinstall lesz
Miután szétturtam a példakódot agyonvertem, megnyúztam, megsütöttem, és még akkor se akart menni Elmásztam kedvenc kis helyemre a WEBen és beillesztettem egy helyre ahol mindenféleképpen futnia kell ha múködőképes... Nos az amit betettem az futott ott (nem a példát de amit szétszedtem)... nálam nem -.-' Namármost ez olyan mókás jelenség volt h ennek örömére elmentem aludni...
Mellesleg az marha hasznos infó lett volna, ha valaki oldalbabök h Hééé az byId csak az első elemet szedi ki... Nah az PL hasznos lett volna... Tiszta Google társadalom. Tudják a tényeket, de a miértekt nem vagdossák hozzá az emberhez. Najó megyek aludni kissé morcosabb vagyok a kelleténél.
Ezt az animálét meg vagdossa ki innen valaki spamolást rühellem csak a spanolással vagyok ok szinten.
Restart lett >D
Pontos helyi, hegyi idő hajnal 2:25
Újrainditást, kód újbóli leirását követően kaptunk egy működőképes változatot. Sajnálatos módon nálam olyan Isten nincs h Nincs. Szal magyarázat h megértsem mit kell csinálni:
Classozni a diveket, igy amikor getElement-ezem akkor azt az adatot ki tudjam préselni a tömbből. ById-vel nem megy, az csak az első elemet kapja ki a többit hagyja a somba. Szal NEKEM maradt a ByName /*okosabbak biztos tudnak mást is :D Csak nem mondják :( */
Már csak be kell tömbözni a DIVeket egy laza for ciklussal onload-nál igy mindegyik tömbelemhez /*azaz a tömbelelemekhez társitott DIVekhez */ hozzá tudjuk adni az addEventListener -t és mindenki boldogan mehet tönkre :D
Nah de hogy a CTRL-C CTRL-V társadalom is örüljön meg én is h lázithatok /* mocskos rockkultúra! Punk Rock 'n' Roll! */ bepakolom a kódot, asszem az alertekből benn maradt pár, de legalább mindenki nyomon tudja követni mi is történik :D
Hulla vagyok ezért ien jó sok a duma :D
P.S.:
ILY helyett...
És h nézzen is ki valahogy dobtam a kódba két képlinket is innen oldalról Muhahahah
Szerintem felesleges a name
Csak kell hozzá készíteni egy getElementsByClassName függvényt valahogy így:
Lehet a regex nem jó, azt nem tudom, nem teszteltem :)
Szép...
/className/i
regex arra a sztringre illik, hogy"className"
. A helyes megadás:new RegExp(className,"i")
lenne.className
után és előtt szóköz, vagy semmi ne legyen, így nem fordulhat elő, hogy a"list"
-re kereső regex illik a"listA"
és a"listB"
sztringekre is.search
-öt sztringre kell meghívni, nem a node-ra, szóvaltempElements[i].className.search
lenne helyesen.search
visszatérő értéke-1
, ha nincs találat, és nem nulla.className
, helyette inkább aclassName
-t kéne ellenőrizni, hogy nem e üres sztring.RegExp.test
-et használniString.search
helyett, mert azBoolean
-t ad vissza, és nekünk arra van szükségünk, nem pedig a találat helyére.Szóval így kéne kinéznie:
Köszi a javításokat :)
1: Az aposztróf, véletlenül került oda
2,3,7: A JavaScript mintaillesztése számomra rejtély, nagyon szokatlan...
4: Egyszerű figyelmetlenség :) Gondolom veled is előfordult már. Nyilván ha az előző sorban jól írtam akkor nem szándékos... :)
3: Ezt nem tudtam, de most megjegyzem
6: A className-t tényleg ellenőrizni kéne, de ilyen alapon agyon lehetne bonyolítani az egészet. Nyilván aki 5 percnél többet kódolt már, az használat előtt ezeket beleteszi, de aki 5 percnél többet kódolt már, az nem fogja copy-paste használni. A className != '' pedig azért került bele, mert minek ilesszünk mintát, ha úgyis üres? PHP-s tapasztalataim alapján a mintaillesztés elég lassú dolog, ezért gondoltam feleslegesen nem kell. :) Megfelelően nagy számú elemnél szerintem érezhető a különbség. De lehet hogy ismét tévedek.
Ezen túl pseudocode-ot írok abban valószínűleg nem lesznek ilyen hibák :) Ám minden bizonnyal segíteni sem fog a kérdezőnek sokat. :)
Egyszerű figyelmetlenség :)
Persze, és azt tanultam belőle, hogy nem teszek ki olyan kódot, amit előtte nem próbáltam ki.
Lehet, nem próbáltam, de nincs rá bizonyíték, hogy bármit is számítana. Php regex motorja teljesen más, mint javascripté...
Ok.
Lemértem a kedvedért:
test1-test1c = 0.8 msec
. Körülbelül ennyit számít, hogy van e üres sztring ellenőrzés vagy sem. Nyilván azindexOf
a leggyorsabb, viszont sokkal bonyolultabb logikailag, ha meg több className-re keresel egyszerre, akkor még komplikáltabb lesz...Magának a
className
-nek a lekérése szerintem übereli a sztring feldolgozásnak az idejét, mert DOM Node-ból kéred le, az meg lassú, de ezt még nem teszteltem.Még egy dolog; a fejlesztés úgy megy, hogy először megírjuk a programot, és csak utána optimalizálunk, és csak nagyon ritkán van az, hogy a program írásakor is oda kell figyelni a terhelésre.
Itt a sztring feldolgozás nagyon rövid idő, szóval teljesen felesleges optimalizálni, mert egyik programban sem ez lesz a szűk keresztmetszet, ezért jobb, ha inkább az átlátható és könnyebben módosítható kódra megy az ember (nálam ez a tiszta regex-es megoldást jelenti).
A módszer, amivel mértem elég gagyi, gondolom vannak jó profilerek js-ben is erre a célra, még nem próbálgattam őket.
Nézd ha ezt most
Ha csak úgy kíváncsiságból mérted meg, hogy azért mégis jelent-e különbséget, akkor viszont köszi az eredményt, most már akkor ezt is tudom, és figyelek is majd rá :)
Tulajdonképpen egyébként akkor baromira mindegy, hogy ott van-e a az üres sztring ellenőrzés vagy sem. Vegyük úgy, hogy én megírtam, te pedig optimalizáltad... Jelen esetben persze nem teljesítményben, hanem átláthatóságban :)
Visszatérve arra az esetre, ha bizonyításnak szántad:
Nem az a probléma, ha elmondod, hogy mit csináltam rosszul, vagy kijavítasz engem, vagy akárki mást. Nem foglalkozom ezzel 100 éve, nem ismerem minden nyelv sajátosságait, és nem vagyok professzor sem. Előfordul hogy az ember mellényúl, téved, vagy rosszul tud valamit. Nem csak velem, veled is előfordult már számtalanszor, és mindenkivel. Gondolom te sem úgy születtél, hogy ezt mind tudtad volna. :)
A gond ezzel van:
Vagy lehet, hogy ezzel nincsen gond, de engem eléggé zavart... :)
Megpróbáltam valamiféle segítséget, vagy megoldást, vagy egy másik megközelítést adni a problémára, erre kiröhögnek... :)
Találkoztam én már itt ennél sokkal nagyobb marhasággal is, amit jótanácsként adott a válaszoló, aztán mégsem röhögték ki. :)
Ezzel szemben szerintem ez nem marhaság volt...
Nézd ha ezt most
Hát van a tekintély elvű megközelítés, amikor elhiszed nekem, mert úgy gondolod többet tudok a témáról, meg van a tudományos, amikor bizonyítékot vársz. Én inkább az utóbbiban hiszek. :-)
Amúgy meg kíváncsi voltam rá, hogy ténylegesen mennyit jelent. Én úgy saccoltam, hogy 10K elemnél már több msec lesz egy-egy teszt futása, ahhoz képest tévedtem két nagyságrendet, ez elég meglepő volt... Az nem lepett meg, hogy kicsi a különbség. Úgy általában nekem az a tapasztalatom js-el, hogy a DOM manipulálás szokott szűk keresztmetszet lenni, az összes többi dolog jóval gyorsabb nála.
Nekem az tetszett, hogy egy sorban sikerült 7 olyan dolgot elkövetni, ami szerintem hiba, vagy nem oda illő. Nem volt benne semmi személyes, ha magadra veszed, az a te problémád, nem az enyém.
dom
dom.js
Kezdj el megbarátkozni a gondolattal, hogy egy html dokumentumban egy id csak egy elemhez tartozhat.
WoW
KB akkor hagytam abba a topicom olvasását mikor megfájdult az oldalam :P Olyan aranyosan civódtok :) (Viszont a szórakozás marhára feltart a melóban -.-') Az IDre igen én is ráeszméltem, mindjárt alvás után. 2 percig sipolt a gép h vegyem le a homolokom a klavról :D Viszont amit irtál igy hirtelen awesome :) Velem az a baj h alap dolgokon akadok el :P Most PL azon törpölök h a somba hivjam meg a JavaScriptet a dokumentum kellős közepén :D ÉRZED?
Rossz szokásom h napokig nem alszok... EZ a legnagyobb hiba a programjaimban :D ezen a héten is valami 6 órát sikerült és már itt is szombat reggel van xD (OK fél nyolc x.O)