ugrás a tartalomhoz

ATTR - html/JS - tudtátok ezt és ha igen mi a vélemény/tapasztalat ?

Mikulasche · 2014. Feb. 12. (Sze), 13.36
Hahó.

Kezdő progger vagyok, és felfedeztem, hogy megadhatok egy elemnek bármilyen attributumot, olyat ami nincs is a nyelvben.

pl. <img src="kep.jpg" milyenallat="hazi">

Ez eddigi tapasztalataim alapján nem okoz hibajelenséget.
Ráadásul jquery-vel le is lehet kérdezni mint attributumot.
Valamint röptében létre is lehet hozni ilyen 'attributumot' és odaadni valamilyen elemnek.

Ez arra volt jó nekem, hogy attributumként el tudtam tárolni, hogy egy adott
elemre kattintottak e már vagy sem. Esetleg hányszor.

Mit gondoltok ? Mit tudtok minderről ?

A kérdés NEM arra vonatkozik, hogy nincs e más megoldás.(Nyilván változók stb...)
Engem ez az attributumos dolog érdekel, mert ezzel sikerült állat egyszerűen megcsinálnom valamit, ami jól működik (eddig).

Tehát hogy valaki, tapasztalt e ezzel kapcsolatban valamit ?
 
1

Attribútumok

Hidvégi Gábor · 2014. Feb. 12. (Sze), 14.11
A böngészőt nem érdekli, ha egy olyan attribútumnak adsz értéket, aminek nincs valami szerepe, a keresőket sem, szóval rakj bele azt, amit csak szeretnél, én is szoktam, nem volt belőle még gond, és nem is lesz, mert nincs jelentősége.

A hivatalos válasz persze az lesz, hogy ilyet ne tégy, mert ha éppen olyan nevű attribútumot használsz, amit később fognak bevezetni, akkor a későbbi működést befolyásolhatod. Az már a te döntésed, hogy foglalkozol-e ezzel vagy sem. Szerintem nem kell vele törődni, mert a HTML ígyis túl van bonyolítva, jóval több terhet szeretnének rárakni, mint amire alkalmas, és amire ki lett találva.
3

Az egy dolog, hogy te mit

bamegakapa · 2014. Feb. 12. (Sze), 14.21
Az egy dolog, hogy te mit csinálsz (a tapasztalatok alapján bármilyen észérv elégtelen a saját elképzeléseid ellen, így ez nem is izgat), de miért akarod a kezdőket igénytelen kódolásra oktatni?
4

Mert nincs jelentősége.

Hidvégi Gábor · 2014. Feb. 12. (Sze), 14.27
Mert nincs jelentősége.
5

Az igénytelenség nem ott

bamegakapa · 2014. Feb. 12. (Sze), 14.42
Az igénytelenség nem ott kezdődik, hogy azt mondod dolgokra, nincs jelentősége? :)

Amúgy én bírom a játékosan renegát hozzáállásodat, csak túl sokszor átcsap értelmetlen önfejűségbe. Ha már az ember használhat saját attribútumokat (data-), és megmaradhat a dokumentuma validitása is, akkor az önfejűségen kívül mi más viheti arra, hogy márpedig ő csakazértis invalid dokumentummal akar dolgozni? :)

Másrészt lehet, hogy számodra nincs jelentősége, ami nem is gond, ha egymagad fejlesztesz egy projektet egész életedben, amit soha senki más nem fog átvenni tőled, de az esetek többségében ez nem így van.
8

Nincs jelentősége annak, hogy

Hidvégi Gábor · 2014. Feb. 12. (Sze), 15.08
Nincs jelentősége annak, hogy egy dokumentum valid-e vagy sem, ha lenne, akkor nem írnám le. Ha én egy HTML4-es fejlécű dokumentumba beleteszek egy <weblabor> nevű elemet, az az égvilágon senkit és semmit nem érdekel, és nem is érint. Éjjel kettőkor egy kihalt utcában te megvárod a zöldet vagy átsétálsz a piroson?
9

Miért ne lenne jelentősége?

bamegakapa · 2014. Feb. 12. (Sze), 15.47
A hibakeresést megkönnyíti, ha validálásnál nem 500 hibán kell átrágnod magad, hanem rögtön látod, hol a probléma. Hányszor kívántam, hogy az az idióta, akinek éppen a szörnyű kódját javítgattam, valid kódot írt volna, mennyivel könnyebb lett volna megtalálni, mit rontott el. De nem, hiszen elég fasza csávó ahhoz, hogy ne érdekelje a valid kód...

Nem is beszélve az olvashatóságról és a közös nyelvről, ami szintén megkönnyíti a munkát. Hiba a fejlesztőnek úgy gondolkodni, hogy ha neki elég jó az a kód, akkor mindenki másnak is elég jó lesz.

A kérdésre válaszolva, természetesen átmegyek a piroson. Az analógia azonban nem stimmel.
13

Kézzel szoktam hibát

Hidvégi Gábor · 2014. Feb. 12. (Sze), 16.38
Kézzel szoktam hibát javítani, egy automata tabulálás és a firebug elég hatékony páros a felderítésben, ugyanez igaz az olvashatóságra is. Ha nincs kedved többet hibát keresni, térjetek át XML-re.
2

Nem használhatsz csak úgy

bamegakapa · 2014. Feb. 12. (Sze), 14.18
Nem használhatsz csak úgy kedvedre mindenféle HTML attribútumokat, mivel a HTML-nek szabályai vannak, amiket érdemes betartani. Ezt úgy mondják, hogy valid HTML-t ír az ember, ennek előnyei pedig a könnyebb hibakereséstől a jobb olvashatóságig terjednek.

Viszont jó hír neked, hogy a HTML5-ben már vannak ún. data- attribútumok, amik megoldják a problémádat. Annyi a feladat, hogy a saját kitalált attribútum-neveid elé oda kell írnod, hogy data-.

A te esetedben:
<img src="kep.jpg" data-milyenallat="hazi" />
A jQuery annyi plusz könnyítést rak a dologba, hogy le tudod kérdezni a tartalmat a $('img').data('milyenallat') kóddal, a .data() metódus segítségével, illetve természetesen a .attr() metódussal is.
6

Helyes

Steve31 · 2014. Feb. 12. (Sze), 14.47
Csak annyit szólnek, hogy teljesen igazad van. Sok fejlesztő viszont nem veszi komolyan a valid HTML-t, meg még sorolhatnám a többi problémát, amikkel eddig találkoztam.
7

Attribútumok

Hidvégi Gábor · 2014. Feb. 12. (Sze), 14.58
Attól függetlenül, hogy megteheted, kérdés, van-e értelme attribútumokban bármilyen adatot tárolni. Lehet, hogy elsőre roppant kényelmesnek látszik a kattintások számát ilyen módon nyilvántartani, de logikailag már nem biztos, hogy beleillik a képbe.

1, Az ilyen adatok az oldal működéséhez szükségesek, aminek nem feltétlenül van köze a HTML kódhoz. Miért terheljük a HTML-t a megjelenítéshez nem feltétlenül kötődő elemekkel? (Separation of concerns)

2, Mi van akkor, ha szeretnéd összegyűjteni azokat az elemeket, amiken számolod a kattintásokat? Megkeresheted egy jQuery selectorral őket, ami nem feltétlenül a leggyorsabb folyamat (a DOM eleve minden szempontból lassú), vagy ha külön van választva a HTML és a működés, akkor csak elég mondjuk egy már létező tömbön végigiterálni.

Szerintem ami a legjobb, ha a HTML-ben csak az van, ami a megjelenéshez minimálisan szükséges, a működéshez szükséges és metaadatok pedig teljesen külön vannak választva, jelen esetben egy külön javascript blokkban.

A HTML5-ben a data- attribútumok bevezetése jelentősen rontja a weben tárolt adatok helyzetét, mert arra bátorít, hogy az adatokat keverd bele a HTML-be. Ez amiatt rossz, mert pont ellentétes a korábbi törekvésekkel, hogy válasszuk külön a dolgokat (az adatokat a megjelenítéstől: CSS, az adatok a működéstől: JS), valamint így jóval nehezebb egy oldalból információt kinyerni (mert az adatok egy része önkényesen elnevezett attribútumokban van).
10

Egyetértek azzal, hogy

bamegakapa · 2014. Feb. 12. (Sze), 15.54
Egyetértek azzal, hogy válogassa meg az ember, mi való attribútumba és mi nem. De miért ne rakhatná a HTML-be azt, ami nem megjelenítés (CSS) vagy működés (JS), hanem adat?

Továbbra is azt kérdem (de utoljára, aztán feladom), ha már úgy dönt, hogy attribútumban tárol valamit, miért ne használná a data- attribútumokat?
15

De miért ne rakhatná a

Hidvégi Gábor · 2014. Feb. 12. (Sze), 17.14
De miért ne rakhatná a HTML-be azt, ami nem megjelenítés (CSS) vagy működés (JS), hanem adat?
A HTML az adatok megjelenítésére (és bekérésére) való. Miért tennék bele olyan adatot, ami nem a megjelenítéshez, hanem a működéshez kell? Értem én, hogy "mert megtehetem", de mire jó ez?
16

Kicsit összezavarodtam, eddig

bamegakapa · 2014. Feb. 12. (Sze), 17.18
Kicsit összezavarodtam, eddig a te érved volt a "mert megtehetem" :).

Szerintem mindent kihoztunk ebből, amit ki lehetett.
11

valid attribútumok.

razielanarki · 2014. Feb. 12. (Sze), 16.15
igen valóban csak az a gond vele hogy nem fog átmenni a validátoron a HTML-ed,
ha ez izgat akkor használd a data-* attribútumokat :)

amúgy a validkodók figyelmébe ajánlanám pl az angular.js-t (bár itt többféleképp is lehet), vagy a rivets.js stb binding libraryket ;)
12

Én továbbra is csak azt nem

bamegakapa · 2014. Feb. 12. (Sze), 16.24
Én továbbra is csak azt nem értem, miért jobb a data- nélküli változat. Az a darabonként 5 karakter, ami a tömörítve küldött HTML korában amúgy se sokat számít?

Validkodó, ez tetszik.
14

én pl

razielanarki · 2014. Feb. 12. (Sze), 16.44
én monjuk data-*-ot használok mindenhol ahol olyan adat van amit ki fogok olvasni valahol jsből, ng-*, rv-* vagy a saját api-*, bind-* pedig ottvan ahol kicst mást jelent
(api-* val pl jq pluginokat inicializálok/konfigolok monjuk egy domreadyből)

szóval itt is érvényes az a dolog, h nem összevissza nevezgetjük el a változókat hárombetűs izéknak, hanem valami rendszerben, h érthető/követhető legyen.
17

Köszönet és stb...

Mikulasche · 2014. Feb. 21. (P), 21.58
Mindenkinek köszönöm a hozzászólását. Megint tanultam valamit tőletek.

Cserébe elmondom mire jó ez a "saját" attribútum.

Többen azt hitték, hogy ezt beleírom a html-be, aztán a validátor stb....

Nem írom bele a html-be.
Ebben ez a mámor, hogy csak virtuálisan létezik.
JQuery-vel adom hozzá pl egy input mezőhöz, majd egy másik műveletben lekérdezem.

Gyakorlati példa, talán hasznos lehet másoknak is.

Felhasználói adatokat kérek be, input mezőkbe.
Az inputokhoz nem használok label-t és placeholdert mert így akarom.
Az input mezőbe irom usernek - deftext - hogy mit várok abba a mezőbe.

Ha user belekattint az inputba, JQ üríti. Ez eddig eccerű.
Ha nem ír bele semmmit és máshová kattint JQ visszateszi az eredeti - deftext -et.
Ez se nagy ügy.
De ha user belekattint és ír is bele valamit,
akkor annak ott kell maradnia, ha elkattint onnan, sőt,
ha újra belekattint hogy módosítsa se tűnhet el többé.

Ehhez volt jó nekem a maszek attribútum.

Itt van:
http://jsfiddle.net/Mikulasche/mqj7N/
18

Ez a jó link

Mikulasche · 2014. Feb. 21. (P), 22.18
19

Ha dinamikusan rakod rá

bamegakapa · 2014. Feb. 21. (P), 22.27
Ha dinamikusan rakod rá úgyis, akkor nem kell HTML attribútumokban gondolkodnod feltétlenül. Simán rárakhatsz egy propertyt a DOM objektumra is (vagy használod a data() jQuery metódust).

Amúgy főleg a label azért nem árt, ha az akadálymentességgel is foglalkozni akarsz.

Ettől függetlenül csak így tovább, gyakorlásnak kiváló.