Autor Zpráva
doominick
Profil *
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
doominick:
Snad spíš nějak takhle, jinak by to nedávalo smysl?

for (var i in v) {
  s += v[i];
}
Chamurappi
Profil
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 *
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
doominick:
Nie. V tvojom cykle je i názov atribútu, v[i] je jeho hodnota.
doominick
Profil *
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 *
teď se dívám na to co jsem napsal... a už to vidím XD
Witiko
Profil
doominick:
Nebude to například tím, že Mozilla nenavrací objekt, ale jejich pole? -_-
doominick
Profil *
Witiko:
Fakt nevím, ale rád bych. Kde / jak něco takového zjistím?
Witiko
Profil
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
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 *
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 *
_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
doominick:
Ne DOM, konzole, hned první záložka.
doominick
Profil *
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
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 *
_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
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);
}

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0