[whatwg] <a onlyreplace>
Markus Ernst
derernst at gmx.ch
Fri Oct 16 14:10:02 PDT 2009
Tab Atkins Jr. schrieb:
> Promoting this reply to top-level because I think it's crazy good.
[...]
>> Let's say we add a new attribute to <a>, like <a onlyreplace="foo">,
>> where "foo" is the id of an element on the page. Or better, a
>> space-separated list of elements. When the user clicks such a link,
>> the browser should do something like this: change the URL in the
>> navigation bar to the indicated URL, and retrieve the indicated
>> resource and begin to parse it. Every time an element is encountered
>> that has an id in the onlyreplace list, if there is an element on the
>> current page with that id, remove the existing element and then add
>> the element from the new page. I guess this should be done in the
>> usual fashion, first appending the element itself and then its
>> children recursively, leaf-first.
>
> This. Is. BRILLIANT.
Yes it looks like an AJAX killer.
> The only problem I can see with this is that it's possible for authors
> to believe that they only need to actually write a single full page,
> and can just link to fragments containing only the chunk of content to
> be replaced. This would mostly break bookmarking and deeplinking, as
> visitors would just receive a chunk of unstyled content separated from
> the overall page template. However, because it breaks so *visibly*
> and reliably (unlike, say, framesets, which just break bookmarking by
> sending you to the 'main page'), I think there would be sufficient
> pressure for authors to get this right, especially since it's so
> *easy* to get it right.
Actually the problem I mentioned for Aryehs first proposal remains -
still, a web designer could go wrong, for example when making a static
website by changing another one he/she has made earlier:
The body of page1.html could look like:
<div id="pageHeader">Recipies for vegetarians</div>
<div id="content">
<h1>Lovely broccoli</h1>
<p>Take the broccoli and do the following:</p>
...
</div>
<ul id="navigation">
<li><span>Broccoli</span></li>
<li><a href="page2.html" onlyreplace="content">Leak</a></li>
</ul>
The body of page2.html:
<div id="pageHeader">Recipies for meat eaters</div>
<div id="content">
<h1>Lovely leak</h1>
<p>Take the leak and do the following:</p>
...
</div>
<ul id="navigation">
<li><a href="page1.html" onlyreplace="content">Broccoli</a></li>
<li><span>Leak</span></li>
</ul>
Note that the author forgot to change the page header of the meat eaters
site he/she had used as raw material. The author will test the site and
always see it correctly, while someone who comes from a deep link will
see the meat eaters header.
Anyway I think that this error is much less likely to be made with the
<a onlyreplace> solution. In many cases, such as template-based CMS
sites, the static elements are made in one place only, anyway. I think
this is a problem we could live with, in view of the benefits that this
solution brings.
More information about the whatwg
mailing list