Több div frissítése egyszerre.
Sziasztok!
Van egy üzenőfalam ahol minden üzenetnek van egy
<div id="chat_ido"></div> része és ezt szeretném frissíteni.
Mondjuk van 5 üzenetem amit while al kilistázok és mindegyik <div id="chat_ido"></div>-jét frissíteni akarom.
facebooknál is így van ha postolok akkor az időt időközönként frissíti ilyet szeretnék elérni a üzenőfalamba.
Még annyi hogy ugye az új üzeneteket innerhtml beszúrom ott is jó lesz?
hogy tudnám minden divet frissíteni minden sorba?
Legyetek szívesek segíteni
Előre is köszönöm.
■ Van egy üzenőfalam ahol minden üzenetnek van egy
<div id="chat_ido"></div> része és ezt szeretném frissíteni.
Mondjuk van 5 üzenetem amit while al kilistázok és mindegyik <div id="chat_ido"></div>-jét frissíteni akarom.
facebooknál is így van ha postolok akkor az időt időközönként frissíti ilyet szeretnék elérni a üzenőfalamba.
Még annyi hogy ugye az új üzeneteket innerhtml beszúrom ott is jó lesz?
hogy tudnám minden divet frissíteni minden sorba?
Legyetek szívesek segíteni
Előre is köszönöm.
HTML
id
-je? Az időnkénti frissítést hogyan gondoltad? JavaScripttel ott a setInterval / setTimeout. Előtte persze ki kell keresni az elemet, de azt rengeteg féle képpen lehet (pl. document.getElementsByTagName, document.getElementsByClassName). Majd ki kell számolni az eltelt időt JavaScript-ben a bejegyzés létrejöttétől (amit mondjukdata
attribútumban tárolsz) kezdve (Date.now és Date.getTime, és ugye ez ezredmásodpercben dolgozik). Majd azt szépen formázni kell. Majd bele kell írni az elembe. Ez utóbbira az innerHTML tökéletesen alkalmas."Azt ugye tudod, hogy nem
<div id="chat_ido1"></div>
<div id="chat_ido2"></div>
<div id="chat_ido2"></div>
stb.
erre gondoltál ?
és a data attribútumról tudnál valami infot linkelni ? mert még nem használtam
data attribútumról tudnál
Nálad nem működnek a keresők? data attributes
Különben miért adsz nekik
id
-t? Mire akarod azid
-t használni?az id hogy a js mit
ezt
<ido>...</ido>
<ido>...</ido>
<ido>...</ido>
document.getElementsByTagName("ido")[0].innerHTML="asddfgh";
és a 0 helyére azt írom a melyik sort akarom frissíteni és egyszerübb mint divvel játszadozni .
És ehhez miért kell bevezess
pár dolgot nem értek a kódba
1. times.length ez time mezők hosszát nézi???
2. times[i].datetime times[i] mezőkbe gondolom benne van az idő akkor mi ez a ".datetime"?
picit segítene valaki?
Foglalkozz vele
times
egy változó, ami adocument.getElementsByTagName
eredménye. Namost ha nem tudod mit csinál az a függvény, akkor megnézed a dokumentációját. Atime
egy DOM elem. Annak vannak attribútumai és gyerekei. A benne van ebben az értelemben nem jelent semmi. Vagy mit jelenet szerinted az, hogy benne van?benne van helyet ink azt
szerk.:
Példa szerint csináltam és csak egy pici problémám van hogy a Date.parse(times[i].datetime) ott nem akarja kiolvasni NaN-t ír mindig.
<ido datetime='2013'>3 perc</ido>
miért?
Date.parse
Date.parse
dokumentációját, hogy milyen dátumformátumokat fogad el.ezt használom : 2013-07-02
itt ellenörzöm : http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse
ido
ido
elem tudtommal még nem létezik, ne használd.opera (legfrissebb) hogy
hogy érted hogy az ido elem még nem létezik?:)
<time
<time datetime="2013-07-03T02:57:42+02:00">1 perce</time>
vs
<ido datetime='2013'>3 perc</ido>
function chat_ido() { var
"Date.parse(times[i].datetime);" helyet így írom Date.parse("2013-07-03T02:57:42+02:00"); akkor számol rendesen csak nem "datetime" értékeket :( ötlet?
Mi lenne, ha azt csinálnád,
<ido>
hülyeséget? Használd a<time>
-ot.át írtam nem müködöt.
getAttribute
times[i].datetime
helyett használjtimes[i].getAttribute('datetime')
-t!Lett volna egy eredeti
Just when I thought I was out
Én a helyedben az id
id
jellemzőkkel nem operálnék, mert nem erre való.Helyette esetleg használhatnál
class
jellemzőt minden olyan elemre, ami chat üzenetet jelenít meg pl.:class="message"
Ezekben az elemekben felállítasz egy struktúrát, ami tárolja az üzenetet és az időt.
Javaslom szerver oldalon küld el a pontos időt, mert a kliensre hagyatkozni ilyen téren nem a legjobb. Használj olyan időformátumot, a szerver és a kliens között is ami segíti a számolást. Ilyen pl. az UTC formátum.
Ha megvan az oldal betöltésének pillanatában a pontos szerveridő, eltárolod egy változóban, és attól a ponttól számolsz a már fentebb említett függvények segítségével.
sikerült :)még annyi hogy
még annyi hogy lehet azt meg csinálni mint phpba hogy két idő különbsége meghatározzuk év,hónap,nap,óra,perc,másodperc-be
pl
$now = new DateTime();
$diff = $now->diff($d);
if($diff->y != 0)
if($diff->m != 0)
stb.
hogy tudnám megvalósítani js be is?
segítségeteket előre is köszönöm:)
// Ez optimális esetben
köszönöm sikerült :)
"500 órája 8 perc" 10 perce írtam
meg hogy 4 óra 261 perc O.o
mibe hibáztam?
Kövess valamilyen
A változóidat egy nyelven deklaráld, vagy magyarul, vagy angolul (javasolt az angol).
Nagybetűvel az osztályok neveit szokás kezdeni, amit példányosítani lehet, pl. a
new
operátorral. Általában camel case stílusban minden szót nagybetűvel kezdve és egybe írva. Pl.:ThisAnClassName
.Konstansokat csupa nagybetűvel és underscore stílusban. Pl.:
THIS_AN_CONSTANT_NAME
.A változókat kisbetűvel kezdjük, és lehet camel case vagy underscore stílusban felírni.
A kódban meg valószínűleg rosszul számolsz.
Olvas el ezt.
megnéztem köszönöm szépen a
de nem tudom mit ronthattam el a kódomban:(
Tesztelj statikus adatokkal,
ido_szamitas/60*60 ez ugye
ido_szamitas/60*60
ez ugye megegyezik a következővel:
és máris lehet egyszerűsíteni.
Hogy a perceket kapd, lehet előbb ki szeretnéd vonni az órákat. Ezek mind általános iskolás matek feladatok.
sikerült:) köszönöm:)
Üdv.Mivel az ötlet
Mivel az ötlet megtetszett írtam egy kis függvénytárat (time-ago.js). Nem túl nagy - úgy 100 soros - és még a magyar támogatást meg kell írnom, ha érdekel átküldöm e-mail-ben.
Esetleg githubra
Felrakhatom. Este meg oldom.
Felraktam GitHub-ra:
Karway nagyon jó lett :) ajax
ajax os résznél az a kód sor mit csinál?:)
ajaxos?
Karway eddig is jó volt ;)
"tAgo.updateFieldList();"
Olvasd el
bocsánat :) igazad van:)
A tAgo.updateFieldList() a
tAgo.updateFieldList()
a már meglévőTimeAgo
objektumhoz tartozó elemek listáját frissíti, hogy ne keljen újra példányosítani az osztályt, ha időközben új elemekkel bővül a DOM fa.a
TimeAgo
objektumok afieldList
tulajdonságukban tárolnak egyNodeList
-et amin végig megy mindig mikor ki írja az eltelt időt, ezt a listát frissíti.UI.: még fogok egy módosítást végre hajtani a kódon, ugyan is ha használod a
setTimeOffset()
-et és az oldalon van olyan elem amiben ugyan az a időbélyeg szerepel, akkor az első frissítési ciklusban TIME_ERROR jön, ami azért van mert amíg lefut kód eltelik pár ezredmásodperc ami kicsit bekavar. Ez akkor baj ha mondjuk 10 másodpercenként frissítesz, mert akkor az első 10 másodpercben nem ír ki semmit olykor. Valószínűleg a forráskódupdateTimeAgo
függvényén fogok módosítani az utolsó feltételes ágon, ami ki is van most kommentelve. Vagy pedig asetUpdateInterval()
-on belül amikor meghívom aupdateTimeAgo()
-t azt késleltetem picit az első hívásnál.Közbe módosítottam a kódon,
setTimeOffset()
a kapott idő és a gép idő közti különbséghez még 10 ms-t hozzáad, ami elégnek bizonyult, hogy a fent említett - a futásidőből eredő - probléma ne jelentkezzen.