🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
4 messages
4 total messages Started by zpk Sun, 13 Jun 2010 08:26
Niespójność JS?
#50130
Author: zpk
Date: Sun, 13 Jun 2010 08:26
27 lines
1860 bytes
Bawię się ostatnio własnościami elementów, np:

<element id="xx" class="cc" bla="gg" />

jeżeli zidentyfikuję go np tak:
var el=document.getElementById('xx');

Zauważyłem, że można napisać:
if (el.id=='xx') ...

Ale już nie można
if (el.class=='cc') ...

tylko trzeba:
if (el.className=='cc') ...

A zupełnie nie można
if (el.bla=='gg') ...  //IE to rozumie

tylko trzeba aż:
if (el.attributes.getNamedItem("bla").value=='gg') ...

Z mojego punktu widzenia element ma atrybuty id, class i bla.
Dlaczego nie ma jednolitej interpretacji dotarcia do atrybutów?
A może jest tylko jeszcze do tego nie dotarłem ?

Pozdrawiam- Paweł Krzyżanowski
Re: Niespójność JS?
#50131
Author: Artur Muszyński
Date: Sun, 13 Jun 2010 10:23
33 lines
2106 bytes
W dniu 2010-06-13 10:26, zpk pisze:
> Bawię się ostatnio własnościami elementów, np:
>
> <element id="xx" class="cc" bla="gg" />
>
> jeżeli zidentyfikuję go np tak:
> var el=document.getElementById('xx');
>
> Zauważyłem, że można napisać:
> if (el.id=='xx') ...
>
> Ale już nie można
> if (el.class=='cc') ...
>
> tylko trzeba:
> if (el.className=='cc') ...
>
> A zupełnie nie można
> if (el.bla=='gg') ...  //IE to rozumie
>
> tylko trzeba aż:
> if (el.attributes.getNamedItem("bla").value=='gg') ...
>
> Z mojego punktu widzenia element ma atrybuty id, class i bla.
> Dlaczego nie ma jednolitej interpretacji dotarcia do atrybutów?
> A może jest tylko jeszcze do tego nie dotarłem ?

Tylko że mapowanie atrybutów na property nie jest własnością języka, 
tylko obiektów DOM (identycznie zachowa się skrypt w języku VBScript). 
Class jest słowem zastrzeżonym, a bla to mechanizm IE o nazwie expando 
(o ile dobrze pamiętam), nie występuje gdzie indziej.

artur
Re: Niespójność JS?
#50132
Author: porneL
Date: Sun, 13 Jun 2010 11:56
38 lines
1960 bytes
On Sun, 13 Jun 2010 09:26:31 +0100, zpk <zpksoft@op.pl> wrote:

> Bawię się ostatnio własnościami elementów, np:
>
> <element id="xx" class="cc" bla="gg" />
>
> jeżeli zidentyfikuję go np tak:
> var el=document.getElementById('xx');
>
> Zauważyłem, że można napisać:
> if (el.id=='xx') ...
>
> Ale już nie można
> if (el.class=='cc') ...

Bo class jest (niepotrzebnie) zarezerwowanym słowem kluczowym w JS. Z tego  
samego powodu jest htmlFor i cssFloat.

> A zupełnie nie można
> if (el.bla=='gg') ...  //IE to rozumie

Bo IE (przed v8 czy nawet v9) nie kuma różnicy między właściwościami  
obiektów JS, a atrybutami DOM.

HTML DOM wymaga odzwierciedlania niektórych atrybutów DOM jako właściwości  
obiektów JS, ale to nie jest po prostu odczytywanie atrybutów DOM. Np.:  
a.href da ci pełny URL (http://example.com/etc), ale  
a.getAttribute('href') da ci tylko to, co jest w źródle strony (czyli np.  
"/etc").

> tylko trzeba aż:
> if (el.attributes.getNamedItem("bla").value=='gg') ...

Nie, nie trzeba. el.getAttribute('bla').

-- 
http://pornel.net
this.author = new Geek("porneL");
Re: Niespójność JS?
#50133
Author: zpk
Date: Sun, 13 Jun 2010 13:50
12 lines
1600 bytes
On 13 Cze, 13:56, porneL <niu...@pornel.net> wrote:
> On Sun, 13 Jun 2010 09:26:31 +0100, zpk <zpks...@op.pl> wrote:
>ciach

> > if (el.attributes.getNamedItem("bla").value=='gg') ...
>
> Nie, nie trzeba. el.getAttribute('bla').
>

No, trochę mi ulżyło. Dzięki.

Paweł
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads