473,388 Members | 1,340 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,388 software developers and data experts.

Dynamically changing HTML within a DIV?

I am going nuts trying to find a paragraph in a book that described how to
change the text content (HTML) in a DIV.

Actually I have an array of HTML strings that I want to drop into the DIV,
depending on button clicks, etc.

Putting this stuff into TEXTAREA and TEXT is simple, but I want to be able
to mix font families, weights, sizes, and stuff like that.

Thanks for your help.

DaveH
Jul 20 '05 #1
10 63565
Free-Ed, Ltd. wrote on 28 aug 2003 in comp.lang.javascript:
I am going nuts trying to find a paragraph in a book that described
how to change the text content (HTML) in a DIV.

Actually I have an array of HTML strings that I want to drop into the
DIV, depending on button clicks, etc.

Putting this stuff into TEXTAREA and TEXT is simple, but I want to be
able to mix font families, weights, sizes, and stuff like that.


<script type="text/javascript">
t1="<p style='color:red;'>hi<\/p>"
t2="<p style='color:green;'>there<\/p>"
</script>

<button onclick=div1.innerHTML=t1>t1</button>
<button onclick=div1.innerHTML=t2>t2</button>

<div id="div1"></div>

IE6 tested

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Jul 20 '05 #2
Free-Ed, Ltd. wrote:
I am going nuts trying to find a paragraph in a book that described how to
change the text content (HTML) in a DIV.


http://www.oreillynet.com/pub/a/java.../17/DOM-2.html
http://www.oreillynet.com/pub/a/java.../07/DOM-2.html

--
David Dorward http://dorward.me.uk/
Jul 20 '05 #3
Evertjan. wrote:
<button onclick=div1.innerHTML=t1>t1</button>
<button onclick=div1.innerHTML=t2>t2</button>

<div id="div1"></div>

IE6 tested


Mozilla 1.4 (i.e. Netscape 7.1) - failed
Opera 7.11 - failed
--
David Dorward http://dorward.me.uk/
Jul 20 '05 #4
David Dorward wrote on 28 aug 2003 in comp.lang.javascript:
Evertjan. wrote:
<button onclick=div1.innerHTML=t1>t1</button>
<button onclick=div1.innerHTML=t2>t2</button>

<div id="div1"></div>

IE6 tested


Mozilla 1.4 (i.e. Netscape 7.1) - failed
Opera 7.11 - failed


So only 98% of the worlds users can use it yet.

What do you want ? A push in the right direction or a ready made answer.

I did not test for those minority browsers.

perhaps:

<button
onclick=document.getElementById("div1").innerHTML= t1>
t1</button>

will do the trick.

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Jul 20 '05 #5
"Free-Ed, Ltd." <da***@free-ed.net> writes:
I am going nuts trying to find a paragraph in a book that described how to
change the text content (HTML) in a DIV.
There are several ways.
Actually I have an array of HTML strings that I want to drop into the DIV,
depending on button clicks, etc. Putting this stuff into TEXTAREA and TEXT is simple, but I want to be able
to mix font families, weights, sizes, and stuff like that.


You want to change the document structure dynamically.
This already rules out Netscape 4, Opera 6, and other older browsers,
where you cannot change the document structure.

There are several ways to do what you want. Here are three, with each
their problems and limitiations, including browser support.

innerHTML
---------
One solution, widely used, is the non-standard "innerHTML" property.
It was introduced by Microsoft, but is available in both Mozilla and
Opera 7 (probably because it was in widespread use before a DOM changes
were standardized).

To use innerHTML, you can simply write:

document.getElementById('divId').innerHTML =
"<div id='foo'>new <em>content</em>, yey!</div>";

The HTML is parsed an added as new child nodes of the div node. There
are some places where innerHTML is not so good, typically where the
contents are not HTML. In IE, e.g., the structure of a table is
read-only using innerHTML. That is, for these elements, innerHTML is a
read-only property:
COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD,
TITLE, TR
<URL:http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/dhtml_node_entry.asp>

In Mozilla, using innerHTML on a textarea has the sideeffect of adding
child nodes to it, which is possibly a bug (but since there is no
formal definition of innerHTML, it is hard to say).

The biggest problem with innerHTML is that there is no standard
governing it, so new browsers may chose not to support it. It is
unlikely, as the world looks today, but who know when that might
change.

DOM node creation
-----------------
Instead of having your Javascript create a string and then parse
it to DOM nodes, you can use standard DOM function to create the
structure directly.

Example:

var div = document.getElementById("divId");
// clear previous content:
while (div.hasChildNodes()) {
div.removeChild(div.lastChild);
}
// create and add new content:
var foo = document.createElement("div");
foo.id = "foo";
foo.appendChild(document.createTextNode("new "));
var em = document.createElement("em");
em.appendChild(document.createTextNode("content")) ;
foo.appendChild(em);
foo.appendChild(document.createTextNode(", yey!"));
div.appendChild(foo);

DOM node creation is standardized, so there is reason to believe
that new browsers will support it.

It also requires large amounts of code, and is therefore more
errorprone (more code = more bugs), and it is hard to see what
is really happening.

I usually have some simpler functions as interface, so the above would
become

var div = document.getElementById("divId");
clearContent(div);
var foo =
create("div",["id","foo"], text("new "),
create("em",text("content)"),
text(", yey!"));
div.appendChild(foo);

but it is still a hassle compared to just writing HTML.
Moving DOM nodes
----------------

The third possibility combines the advantages of both of the previous
ones, but restricts you to a fixed, predefined set of contents.

You create the HTML directly in your HTML file, and then use DOM
methods to move them around.

E.g., HTML:
<div id="hiddenWrapper" style="display:none">
<div id="foo">new <em>content</em>, yey!</div>
</div>
and code:
var div = document.getElementById("divId");
var wrapper = document.getElementById("hiddenWrapper");
// store content of div
while (div.hasChildNodes()) {
wrapper.appendChild(div.lastChild);
}
// insert new content
div.appendChild(document.getElementById("foo"));

As I said above, this requires you to have created all the possible
values you want to insert in advance. If you can do that, it works fine.
Otherwise, you will have to use one of the other methods, where you
can create new DOM trees truely dynamically.
Good luck
/L
--
Lasse Reichstein Nielsen - lr*@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'
Jul 20 '05 #6
"Evertjan." <ex**************@interxnl.net> writes:
So only 98% of the worlds users can use it yet.
While statistics disagree on how many people use each browser, I have
not seen one that claimed 98% IE browsers recently.
What do you want ? A push in the right direction or a ready made answer.
I don't care, as long the reader knows which it is. I take it, it was
meant as a push.
I did not test for those minority browsers.
No need to test each time. That method of coding is well known not to
work in anything but IE, and is considered bad conding practice by
many of the readers of this group, for that exact reason.
<button
onclick=document.getElementById("div1").innerHTML= t1>
t1</button>

will do the trick.


Yes. It is still illegal HTML since the value isn't quoted.
/L
--
Lasse Reichstein Nielsen - lr*@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'
Jul 20 '05 #7
Lasse Reichstein Nielsen wrote on 28 aug 2003 in comp.lang.javascript:
<button
onclick=document.getElementById("div1").innerHTML= t1>
t1</button>

will do the trick.


Yes. It is still illegal HTML since the value isn't quoted.


my mistake, sorry:

<button
onclick="document.getElementById('div1').innerHTML =t1">
t1</button>

So what is the scope of the <button> button ?
--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Jul 20 '05 #8
"Evertjan." <ex**************@interxnl.net> writes:
<button
onclick="document.getElementById('div1').innerHTML =t1">
t1</button>

So what is the scope of the <button> button ?


I am not sure what you mean by the scope of the button.

The variables that are available to the event handler (as if wrapped
in a "with" construct) are (if I remember correctly):
the global variables (properties of the global object)
the properties of the document object
the properties of the form elemen, if the button is inside a form
the properties of the button element itself.

And for the record, I would add "type='button'" to the button tag.
The default type is "submit".
/L
--
Lasse Reichstein Nielsen - lr*@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'
Jul 20 '05 #9
Lasse Reichstein Nielsen wrote on 28 aug 2003 in comp.lang.javascript:
So what is the scope of the <button> button ?


I am not sure what you mean by the scope of the button.


Sorry, I ment scope in the sense of
"which browsers do [not] support <button>..</button>" ?

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Jul 20 '05 #10
Lasse Reichstein Nielsen <lr*@hotpop.com> wrote in message news:<k7**********@hotpop.com>...
I usually have some simpler functions as interface, so the above would
become

var div = document.getElementById("divId");
clearContent(div);
var foo =
create("div",["id","foo"], text("new "),
create("em",text("content)"),
text(", yey!"));
div.appendChild(foo);


Does this perform the work of create as hinted above?

function create ()
{
var argv = create.arguments;
var argc = argv.length;
var child;
var i;
var j;

var node = document.createElement (argv[0]);
for (i = 1; i < argc; ++i)
{
child = argv[i];
if (child.prototype.constructor == Array)
{
for (j = 0; j < child.length; j += 2)
{
node[child[j]] = child[j+1];
}
}
else
{
node.appendChild (child);
}
}
return node;
}

Example use:

var inp = create ("input",
["type", "text", "size", "30",
"value", "default value"]);

Note that it doesn't fit all my criteria for a single function to
create input nodes. I cannot set an "onchange" element that depends
on the node itself, for instance using a closure that depends on
passing inp.value to the updateList function as a parameter:

function onchangeUpdateList (obj, name)
{
return function () { return updateList (ofrm.list_list.value,
obj.value, name); };
}
Jul 20 '05 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Billy | last post by:
Hello, I'm having a problem dynamically changing the color of a table background. I'm not sure exactly how to word this, but I'll give an example. I have a function called greentored(propname)...
5
by: Rick Spiewak | last post by:
I need to generate a "buy" button as part of an ASP.NET page - this consists of a small HTML form with hidden fields, conforming to the requirements of a merchant credit card processor. PayPal is...
1
by: Jeff H. | last post by:
I created a survey page with dynamically added html controls, as below. However, now that I have the page, is there a way to reference the fields to get the data out? while...
1
by: Marcus | last post by:
I have a problem maybe one of you could help me with. I've created a data entry screen with lots of dynamically-created client-side controls. I create HTML texboxes client-side by assigning a...
2
by: gralexp | last post by:
Hi Guys. I have a problem, and for some reason I have not been able to find an answer on the net. In a nutshell, I have some codes on my page, which I want to change to an appropriate string...
1
by: Jeremy | last post by:
Hi, I am attempting to load an ad Banner to coincide with a piece of video pre-roll. The following function is called which is supposed to create an empty IFRAME. Once this IFRAME object is...
2
by: John | last post by:
Hi Everyone, I have a question about dynamically changing the length of a varchar(n) field, in case the value I'm trying to insert is too big and will give a "truncated" error, but before the...
1
by: johnjsforum | last post by:
Buddies, I have a web page to create HTML buttons dynamically as in the “formDivColorPicker” function ////////////////////////////////////////////////////////////////////////////////////...
3
by: senthilkumarb | last post by:
Dynamically changing browser settings Browser have various settings like - cookies, cache, etc... How to check a browser whether cookies is Enabled OR Disabled in the client machine using...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.