473,398 Members | 2,812 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,398 software developers and data experts.

Differences between perhaps-similar constructs?

Inside of <script></script>, inside of <body></body>, what
are the differences between

document.body.className="mystyle";
and
document.body.setAttribute("class", "mystyle");

? (...assuming that a CSS "mystyle" has been defined.)

================================================== ==============
What are the differences between

word = new String("td");
and
word = createTextNode("td");
?
Jun 27 '08 #1
3 1266
ge********@gmail.com wrote:
Inside of <script></script>, inside of <body></body>, what
are the differences between

document.body.className="mystyle";
and
document.body.setAttribute("class", "mystyle");

? (...assuming that a CSS "mystyle" has been defined.)
The first one is supposed to work, due to buggy implementations the second
one is not always supposed to work. The first one is therefore recommended.
================================================== ==============
What are the differences between

word = new String("td");
and
word = createTextNode("td");
?
The first one creates a new String object with the value "td" and returns a
reference to it that is then stored in `word'. Usually such is overkill as
ECMAScript implementations define the primitive string type:

word = "td";

The second one, as it is, likely causes a ReferenceError exception as no
object in the scope chain has such a method; if you meant

word = document.createTextNode("td");

instead, if supported it creates a new object implementing the TextNode
interface, with nodeValue == "td", and returns a reference to it that is
then stored in `word'. `word' referring to such an object can be used to
add a text node to the DOM tree; `word' referring to a String object or
`word' storing a string value cannot.
PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
Jun 27 '08 #2

The question you actually ought to ask is, what are the differences
among:

"td"
new String("td")
String("td")
document.createTextNode("td")

I defer to PointedEars's answers for your questions about className
and createTextNode. However, the other forms are more nuanced. When
you
use the "new" keyword before a type like "String", or "Number", it
creates
a boxed object which is distinct from a string or number literal.
Here
are some invariants:

typeof "" == "string"

typeof String("") == "string"

typeof new String("") == "object"

These are all equivalent:
new String(x).toString()
String(x)
x.toString()
"" + x

And these are all equivalent:
new Number(n).valueOf()
Number(n)
n.valueOf()
+n

I personally avoid using "new".
Jun 27 '08 #3
VK
On May 23, 8:33 pm, gentsqu...@gmail.com wrote:
Inside of <script></script>, inside of <body></body>, what
are the differences between

document.body.className="mystyle";
and
document.body.setAttribute("class", "mystyle");

? (...assuming that a CSS "mystyle" has been defined.)
First of all, it is not important _where_ the script is located: it is
only important _when_ it is called. In the particular
document.body.something=anything can be only executed after DOM Tree
being ready thus after window's load event fired. Before that point
document.body is null so such expression will result in runtime error.
This way the proper question is:

After document being successfully loaded and window's load event
fired, is there any difference between i) scripting DOM interfaces and
ii) direct element node manipulation, other words are
document.body.className="mystyle";
and
document.body.setAttribute("class", "mystyle");
equal by their functionality or not?

The answer is "yes and no". Yes, the resulting effect is often _but
not always_ the same. No, these are two technically completely
different processes where the first (scripting DOM interfaces) has to
be always used in Javascript and the second (direct element node
manipulation) should be used only in a narrow set of particular
circumstances.

The scripting DOM interfaces does exactly what the name implies and
what programmer wants: it gets/sets scriptable element properties to
affects its runtime look and/or behavior. Say
document.body.className="mystyle";
means "apply to body style rules defined in mystyle class"
It also reflects the changes in the DOM Tree, so the body's node gets
extra attribute node "class" with value "mystyle". You can check that
by querying document.body.hasAttribute("class") afterwards - except
for IE where hasAttribute is not functional until IE8 beta. But this
additional DOM Tree update happens only for properties defined in the
element's scriptable DOM interface. Say
document.body.foobar = "foobar";
adds extra property to the DOM interface which you can use later - but
it is not reflected in the DOM Tree,
document.body.hasAttribute("foobar") == false

From the other side getAttribute, setAttribute and hasAttribute
methods are intended to manipulate the element's node in the DOM Tree.
In the particular
document.body.setAttribute("class", "mystyle");
means "create attribute node "class" and set the text node value to
"mystyle". In many circumstances it still leads to DOM interface
requests afterwards so say document.body gets the style rules of
mystyle class applied. This behavior is of the same kind as say
window.location in IE allowed to be used both as a field and a method.
Other words sometimes it is easier to break the model rather than
trying to fight with legions of developers stubbornly making the same
mistake over and over again.

So to sum up the answer: always use the DOM scripting which is correct
- or use the setAttribute sidewalk which is silly but mostly
functional.

In either case there are two situations where only one of ways is
suitable.

1) For each DOM interface there is a predefined set of properties and
methods it has by default. The attribute nodes with names not listed
in the set are not reflected in the DOM interface, at least not in all
browsers. Say having an element like
<input type="text"
name="email" id="email"
filltype="mandatory">
in Firefox will create an element node with attribute nodes "type",
"name", "id", "filltype". At the same time DOM interface will reflect
only three of them ("type", "name", "id") so
document.forms['myform'].email.filltype
will be undefined because "filltype" is not in the default list. To
get the values of custom attribute one has then to use getAttribute
to query the DOM Tree:
document.forms['myform'].email.getAttribute('filltype')
will return "mandatory"

2) Intrinsic event handlers have to be set _only_ over the DOM
interface:
document.forms['myform'].onclick = myFunction;

// WRONG:
document.forms['myform'].
email.setAttribute('onclick', 'alert(this.name)');
Now you know the above means "create "onclick" attribute node and set
its text node value to "alert(this.name)". By knowing it you will not
expect anymore that setting some text node value would have anything
to do with element event handlers. And this is a correct conclusion
because say IE does exactly what it means and nothing more: it creates
the mode with text value "alert(this.name)" but no event handler for
the input element. Event handlers are for DOM interface, not for DOM
Tree.
================================================== ==============
What are the differences between

word = new String("td");
and
word = document.createTextNode("td");
?
The first creates Javascript String object with valueOf "td"
The second creates DOM Tree text node with value "td".

The actual difference depends on how and where either is being used.

Jun 27 '08 #4

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

Similar topics

0
by: Dan Gass | last post by:
The difflib.py module and the diff.py tools script in Python 2.4 alpha 3 now support generating side by side (with intra line differences) in HTML format. I have found this useful for performing...
2
by: Daniel | last post by:
Hi, Are there any differences between C# and VB.Net besides syntax? Performance-wise, how do they compare? Thanks, Dan
14
by: Bern | last post by:
what are all the diferences between the two?
13
by: Kieran | last post by:
I am designing a content management system and I want to make sure all pages entered into it's database by users are using valid HTML. I have designed the system to use HTML 4.01 Transitional...
27
by: hokieghal99 | last post by:
What is the difference between these two statements? Are there any major differences? const char filename = "ips_c.txt"; char filename = "ips_c.txt"; Thanks!!!
13
by: Blue | last post by:
Hi , Can any one please let me explain me the diffrences between "open"/ "fopen" or "read"/"fread" or "write/fwrite". I know that "open" /"read" / "write" are system calls and "fopen"...
11
by: Mark Cubitt | last post by:
the reason I ask is I have always used postgres at home and work, but my new web host only has mysql :( I want to know what sort of differences I will have in regards to programming php/perl...
2
by: Jeroen | last post by:
We have update operations on strings, where we know the "New" and "Old" version of the string. A html report will be generated about many of these changes. I would like to mark these changes with...
1
drhowarddrfine
by: drhowarddrfine | last post by:
I have a program that runs fine on FreeBSD but yesterday I transferred it over to a linux box and it failed. (Actually it's a web server on a shared host). What is happening is a run time linker...
7
by: Karol R | last post by:
Can anyone please explain me main differences between relational DB and warehouse (Point me to web site) ? Apart from theoretical differences I would like to know how Warehouse DB is updated ?...
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...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
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
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
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

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.