Autor | Zpráva | ||
---|---|---|---|
doominick Profil * |
#1 · Zasláno: 27. 9. 2010, 16:06:42
Snažím se udělat funkci která zjistí jestli se změnilo cokoliv v css určitého objektu.
Tedy načtu si všechny hodnoty do řetězce javascriptem a po určitém čase znovu to samé a 2 řetězce porovnám. Jenže teď co to testuji jsem zjistil že můj script je Firefox only. Rád bych to rozchodil na více prohlížečích... problém je v uložení všech hodnot css do řetězce. Mám objekt CSSStyleDeclaration ve kterém to všechno je, v FF to dostávám ven cyklem for (var i in v) { s += v[v[i]]; } kde v je [object CSSStyleDeclaration] a s je řetězec do kterého hodnoty přihazuji. Nevím pořádně jak s objektem v javascriptu pracovat a ani nevím jakou tam má strukturu dat... není v javascriptu něco jako print_r() z php ? |
||
Witiko Profil |
#2 · Zasláno: 27. 9. 2010, 17:43:48 · Upravil/a: Witiko
doominick:
Snad spíš nějak takhle, jinak by to nedávalo smysl? for (var i in v) { s += v[i]; } |
||
Chamurappi Profil |
#3 · Zasláno: 27. 9. 2010, 17:51:33
Reaguji na doominicka:
„v FF to dostávám ven cyklem“ To ti přeci nemůže správně fungovat ani ve Firefoxu. Raději bych plnil pole než přifukoval řetězec. Ve většině vyšších programovacích jazyků je String konstantní a při jakékoliv změně se vytváří nový String => pokud k prázdnému řetězci postupně desetkrát přičteš jeden znak, zabereš v paměti stejně místa jako 55 znaků, nikoliv jako 10. |
||
doominick Profil * |
#4 · Zasláno: 27. 9. 2010, 17:52:28
Witiko:
právě že ne... v[i] mi vypíše jméno atributu background-attachment, background-color, ... a když udělám v[v[i]] mám hodnotu toho atributu, což právě potřebuju, ale jak říkám takhle to funguje jen v FF. |
||
Yur4Y Profil |
#5 · Zasláno: 27. 9. 2010, 17:55:22
doominick:
Nie. V tvojom cykle je i názov atribútu, v[i] je jeho hodnota. |
||
doominick Profil * |
#6 · Zasláno: 27. 9. 2010, 18:06:56
Yur4Y:
já za to nemůžu ale poslední FF a i Chrome mi skutečně z c = document.getElementsByTagName('div')[0]; v = (c.currentStyle) ? c.currentStyle : getComputedStyle(c, null); for (var i in v) { document.write(v[i]+' : '+v[v[i]]+'<br>'); } vypisují: background-attachment : scroll background-clip : border-box background-color : rgba(0, 0, 0, 0) background-image : none background-origin : padding-box background-position : 0% 0% background-repeat : repeat background-size : auto auto border-bottom-color : rgb(255, 0, 0) . . . ale Explorer tady končí a vrací: green : undefined auto : undefined 2 : undefined black : undefined normal : undefined none : undefined black : undefined #d4d0c8 : undefined normal : undefined 1px : undefined ltr : undefined solid : undefined auto : undefined both : undefined blue : undefined . . . Ale věřím že způsob v[v[i]] není nejlepší a že musí existovat nějaká správná cesta |
||
doominick Profil * |
#7 · Zasláno: 27. 9. 2010, 18:09:54
teď se dívám na to co jsem napsal... a už to vidím XD
|
||
Witiko Profil |
#8 · Zasláno: 27. 9. 2010, 18:13:37
doominick:
Nebude to například tím, že Mozilla nenavrací objekt, ale jejich pole? -_- |
||
doominick Profil * |
#9 · Zasláno: 27. 9. 2010, 18:18:03
Witiko:
Fakt nevím, ale rád bych. Kde / jak něco takového zjistím? |
||
Witiko Profil |
#10 · Zasláno: 27. 9. 2010, 18:27:30
doominick:
Já vím, stačí si to hodit do javascriptové konzole daného prohlížeče. Pro Mozzilu je to Add-on Firebug. |
||
_es Profil |
#11 · Zasláno: 27. 9. 2010, 18:45:11
doominick:
„Ale věřím že způsob v[v[>i]] není nejlepší a že musí existovat nějaká správná cesta“ Áno, nepoužívať také divné algoritmy. Načo je dobrá metóda, ktorá zistí, že sa niektorá zo všetkých možných vlastností CSS nejako zmenila a to takýmto zložitým spôsobom? |
||
doominick Profil * |
#12 · Zasláno: 27. 9. 2010, 18:52:18
Witiko:
Firebug mám, ale zrovna ze záložky DOM mám strach... tam jsou tisíce položek a moc se v nich nevyznám. Zvlášť když po rozkliknutí jich je milion. Snad se to někdy naučím... díky všem za pomoc. |
||
doominick Profil * |
#13 · Zasláno: 27. 9. 2010, 18:54:38
_es:
Mám pro to náhodou docela dobré uplatnění... mám stránku kde je fakt hodně odkazů v seznamu (ul li) a uživatel má vybrat jen oblíbené stránky se kterýma se pak bude dále pracovat... na a na tohle stavím javascript, který využije css exploit a stránky na kterých už uživatel byl mu přesune na začátek seznamu. |
||
Witiko Profil |
#14 · Zasláno: 27. 9. 2010, 18:57:21 · Upravil/a: Witiko
doominick:
Ne DOM, konzole, hned první záložka. |
||
doominick Profil * |
#15 · Zasláno: 27. 9. 2010, 19:35:13
Witiko:
teď to sleduju a jen zírám... nevěděl jsem že je tam taková drsná funkce, s tímhle je to mnohem jednoduší než to hledat v tom DOM stromu |
||
_es Profil |
#16 · Zasláno: 27. 9. 2010, 19:43:06 · Upravil/a: _es
doominick:
„stavím javascript, který využije css exploit a stránky na kterých už uživatel byl mu přesune na začátek seznamu.“ No ale na to netreba overovať všetky možné vlastnosti, ale stačí len tie, u ktorých nastavíš, aby sa u navštívených odkazov zmenili. „mám stránku kde je fakt hodně odkazů v seznamu (ul li)“ Hentakým spôsobom budeš mať stránku, ktorá bude fakt hodne vyťažovať procesor a štvať návštevníka. |
||
doominick Profil * |
#17 · Zasláno: 27. 9. 2010, 20:25:11
_es:
Všechny vlastnosti potřebuji do začátku aby byl script co možná univerzální... javascriptem vytvořím přímo v ul elementu 2 odkazy, navštíveny a nenavštívený. A pouze u těchto 2 testuji všechny css hodnoty... a až najdu první rozdíl zapamatuji si jeho pozici a u všech ostatních odkazů testuji jen tuhle vlastnost. Mám na to EeePc 901 což je jeden z nejstarších netbooků a ten výkon tam moc není, přesto stránka přeskupí odkazy okamžitě, takže velkého vytížení procesoru bych se nebál. Lepší řešení by bylo nastavit si barvu pro 'a,a:link' a pro 'a:visited' ručně a testovat jen tu, ale po docela dlouhé době jsem stále nepřišel na to jak javascriptem vytvořit pseudotřídu pro všechny odkazy. |
||
_es Profil |
#18 · Zasláno: 27. 9. 2010, 20:52:14 · Upravil/a: _es
doominick:
„A pouze u těchto 2 testuji všechny css hodnoty“ Som sa obával, že to prebieha pre každý odkaz. „jsem stále nepřišel na to jak javascriptem vytvořit pseudotřídu pro všechny odkazy“ Na dynamické pridanie štýlu by mala fungovať všeobecná funkcia: function loadStyleString(css){ var style = document.createElement("style"); style.type = "text/css"; try {style.appendChild(document.createTextNode(css)); } catch(ex){style.styleSheet.cssText = css;} var head = document.getElementsByTagName("head")[0]; head.appendChild(style); } |
||
Časová prodleva: 14 let
|
0