W3C home > Mailing lists > Public > whatwg@whatwg.org > April 2007

[whatwg] Attribute for holding private data for scripting

From: Kevin Marks <kevinmarks@gmail.com>
Date: Wed, 11 Apr 2007 12:35:15 -0700
Message-ID: <73766b160704111235t7bd131cfrcc8751bf0c8d88ae@mail.gmail.com>
On 4/11/07, Jon Barnett <jonbarnett at gmail.com> wrote:
>
>
> On 4/11/07, Kevin Marks <kevinmarks at gmail.com> wrote:
> > On 4/11/07, Jon Barnett <jonbarnett at gmail.com> wrote:
> > > > If you want structured data in this attribute, why not just use JSON?
> > >
> > > That's an idea that crossed my mind as well.  I dismissed it for a few
> > > reasons:
> > > - authors would have to entitize quotes and ampersands in their
> attributes,
> > > which they're not used to doing with JSON normally.
> > > - evaluating it would mean:
> > > var obj = eval( myelement.getAttribute("_myjson");
> >
> > How about defining an attribute that is the name of the js variable
> > for use with that element? Then you can define the variable in a
> > <script> tag, and use pure JSON cleanly.
>
> I don't understand what you mean there.  It was said that we don't need to
> add something new to the DOM.  If I understand, you're suggesting a single
> attribute hypothetically called "params" spec'ed to be a JSON format:
> <div params="{foo: 'bar', bish: &quot;bash&quot;}"></div>
> with the DOM attribute named params that parses that attribute as JSON into
> an object so that something like this happens in JavaScript:
> ...
> mydiv.params.foo == 'bar'; // it is!
>
> While that would be nice, it's not something browsers currently do, and the
> goal is to spec something that today's browsers already handle and HTML5
> validators will be happy with.  Granted, you can use eval() in Javascript to
> get what you want in todays browsers, but is it best to actually spec it
> that way?

No, what I'm suggesting is that you have, say, a 'localdata' attribute
that names the associated variable:
<script>myparams={"foo":"bar","bish":"bash"};</script>
<div class="mydiv" localdata="myparams">

mydiv.localdata.foo =="bar"; // it is

I think making this work in current browsers would be doable by having
a script that creates the DOM elements by looking for the 'localdata'
parameters.
Received on Wednesday, 11 April 2007 12:35:15 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 16:58:54 UTC