[ noviKorisnik @ 24.04.2004. 00:42 ] @
Primer 1.
Citat:
<div id="jedan">jedan</div>

Ako ovom elementu želimo da promenimo boju teksta dinamički - malo javascripta:

document.getElementById ('jedan').style.color = '#00f';


<div id="dva" style="color: #00f;">dva</div>

Ako element već ima plavi tekst, neka postane crven, inače neka bude plav:

var divId = 'dva';
var divStyle = document.getElementById (divId).style;
divStyle.color = divStyle.color == '#00f' ? '#f0f' : '#00f';


Ako se plavi tekst ne definiše u tagu već u CSS elementu ili fajlu:

#tri {color: #00f;}

<div id="tri">tri</div>

var divId = 'tri';
var divStyle = document.getElementById (divId).style;
divStyle.color = divStyle.color == '#00f' ? '#f0f' : '#00f';

... ne dobija se isti rezultat !

Niže je kod sličnog primera, predlažem da ga preuzmete i poigrate se malo da vidimo postoji li odgovor na pitanje:

- Kako pročitati inicijalnu vrednost atributa stila elementa koja nije zadana inline?

... naravno, ako već znate odgovor, dajte za početak neki hint. Ako odgovor ne znate, svako mišljenje na temu "u kome grmu čuči zeka" je dobrodošlo.

Primer 2.
Code:
<html>
<head>
<title>style object</title>
<style>
div
{
    margin: 1% 10%;
    padding: 1%;
    background-color: #ccc;
    border: thick outset #999;
    font: xx-large monospace;
    font-weight: bold;
    color: #f00;
    text-align: center;
}
#id0
{
    display: block;
}
#id1
{
    display: none;
}
</style>
<script>
toggleDivsStyleDisplay = function ()
{
    var divs = document.getElementsByTagName ('div');
    var divStyle;
    for (var i = 0; i < divs.length; i++)
    {
        divStyle = divs [i].style;
        divStyle.display =
            divStyle.display == 'block'
          ? 'none'
          : 'block';
    }
}
</script>
</head>
<body>
<div id="id0" onclick="toggleDivsStyleDisplay ();">0</div>
<div id="id1" onclick="toggleDivsStyleDisplay ();">1</div>
</body>
</html>
[ -zombie- @ 24.04.2004. 03:10 ] @
pošto tražiš samo hint, pogledaj getComputedStyle() za DOM (gecko) i currentStyle za IE.

mada, ima razlike između ta dva. kao što mu ime kaže, document.defaultView.getComputedStyle() metod DOM::ViewCSS interfejsa bi trebalo da vraća izračunate vrednost CSS osobina (properties). znači ako je osobina bila specificirana kao neka relativna ili izračuniva vrednost (procenti, em, smaller, auto i slično), rezultat bi trebalo da bude izračunata vrednost (computed style, kao što je definisan u CSS specifikaciji), u pixelima ili čemu već.

nasuprot tome, element.currentStyle vraća samo specificiranu vrednost (kada se primene sva kaskadna pravila), pa će relativne i izračunive vrednosti ostati baš takve (10%, 30em, auto)..

// mada: izgleda da se i getComputedStyle() ponaša sličnije currentStyle, bar u trenutnoj gecko implementaciji (verziji)..
[ noviKorisnik @ 24.04.2004. 21:43 ] @
Ma čuh ja jedared da JS nije objektno orijentisan jezik ;)
Pogle putanje do tražene vrednosti -
document.defaultView.getComputedStyle (divs [i], '').getPropertyValue ('display') - neverovatno - Dobro je i radi - baš kao što radi i divs [i].currentStyle.display - svaki kod svoje kuće - još da ne postoji DOM i DOM - već samo DOM - gde bi nam bio kraj - .
[ -zombie- @ 25.04.2004. 05:08 ] @
za DOM ne mora tako dugačko. može i window.getComputedStyle(e).display. tj, rezultate getComputedStyle() funkcije možeš posmatrati kao currentStyle objekat (iako ne piše dokumentaciji, vraćeni objekat implementira CSS2Properties interfejs).

i ko je rekao da JS nije objektno-orijentisan? on je funkcionalni i objektno-orijentisan, samo nije klasičan OO jezik koji razlikuje klase i objekte, već samo poznaje prototipove. vidi objašnjenje na http://devedge.netscape.com/li...javascript/1.5/guide/obj2.html

čak je sa malo prototype magije moguće oponašati ovu osobinu IEa u mozili (ili obrnuto, mada je IE sintaxa kraća). npr dodaj ovo u skript:

Code:
HTMLElement.prototype.currentStyle getter = function() {
    return this.ownerDocument.defaultView.getComputedStyle(this, null);
}   


i u mozilli ćeš moći da pročitaš element.currentStyle.color..
[ noviKorisnik @ 25.04.2004. 21:17 ] @
Citat:
i ko je rekao da JS nije objektno-orijentisan?

Nije bitno ko je, doživeo sam da to čujem i najgore je što je dotični lik bio mrtav ozbiljan prilikom izjave (znači - radi se o dubokom ubeđenju).

Nego, getter mi je nov pojam pa sam malo pogledao i na http://www.mozilla.org/js/language/js20-1999-02-18/functions.html nađem definiciju funkcije
Citat:
[Visibility] [getter | setter] function Identifier ( Parameters ) [TypeExpression] Block | TraditionalFunctionDefinition

Radi se o draftu za JS 2.0 iz 1999. godine. Koliko je ovo prisutno u životu tekućih browsera i da li je postalo u međuvremenu standard? Tu je uvođenje pojma Visibility, zatim vidim opciono navođenje tipa, takođe i za parametre, kao i opcione parametre. Nastavim dalje do http://www.mozilla.org/js/lang...0-1999-02-18/declarations.html i tu vidim da postoje i klase, javnost i privatnost...
[ -zombie- @ 02.05.2004. 16:26 ] @
rekao da JS nije OO? a šta mu dođe ono document.forma1.element2.value? (to postoji u JS od kada postoji JS)

btw, moderatore, slabo čitaš dokumentaciju.. ;)

http://devedge.netscape.com/li...ning%20Getters%20and%20Setters

getteri su deo JSa od verzije 1.5 (od mozile 1.0), a EcmaScript standarda od verzije 3 (koji odgovara JS 1.5. EcmaScropt V1 odgovara JS 1.3 koji implementira IE valjda od 5.0 ili 5.5+).

dakle, sve to postoji već skoro 5 godina, ali naravno da se ne može koristiti u IE 6 koji je stariji od toga..

i btw, onaj kod koji sam pokazao prošli put je depriciated sintaxa (do JS 2.0, tj EcmaScript V4), jer nije unazad kompatibilan sa starim JS parserima. pravilna sintaxa je:

Code:
Klasa.prototype.__defineGetter__('osobina', function() {
    return 'nešto';
}


(analogno za setter) ali meni se više sviđa getter, kada ionako ni jedno ni drugo ne rade u IE, a ovo prvo će raditi i u budućnosti..