473,387 Members | 1,532 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,387 software developers and data experts.

Accessing table cells by Row #, Col #

I want to be able to access cells within an HTML table, via computed row
number and column number.

I was considering using oTableID.children[] and oTR.children[] arrays.

My question is what browsers and browser versions support this?

If the children[] constructs are not fairly universally supported, then what
is a better approach to doing this?

- David

Jul 23 '05 #1
6 7078
"David D." <da*****************************@comcast.net> wrote in message news:<AM********************@comcast.com>...
I want to be able to access cells within an HTML table, via computed row
number and column number.

I was considering using oTableID.children[] and oTR.children[] arrays.

My question is what browsers and browser versions support this?

If the children[] constructs are not fairly universally supported, then what
is a better approach to doing this?

- David

What I've done may not be the prettiest solution, but it works. Each
cell in the table gets assigned an ID (<TD id="R5C6">xxxxx</TD>)

Then, if a user clicks in a cell, I use event.srcElement.id to get
the ID of the clicked cell, and take it from there.
Jul 23 '05 #2
Bruce,

Thanks for the suggestion.

Your technique is good for finding which cell was clicked on.

Now, suppose you wanted to change some attributes (e.g., the background
color) of each cell ADJACENT to the cell that was clicked on (above, below,
right, left and diagonal). That's why I was considering an indexed array
solution such as table.children[] and tr.children[]. Alternatively, using
your suggestion, I could parse the name and use the "eval" statement to
reference other cells. I just thought that an integer array index solution
would be easier and more efficient.

However, an important factor is my choice of solution is the percentage
of installed browsers that would support a particular solution.

- David
"bruce" <br*************@glic.com> wrote in message
news:d3**************************@posting.google.c om...
"David D." <da*****************************@comcast.net> wrote in message

news:<AM********************@comcast.com>...
I want to be able to access cells within an HTML table, via computed row
number and column number.

I was considering using oTableID.children[] and oTR.children[] arrays.

My question is what browsers and browser versions support this?

If the children[] constructs are not fairly universally supported, then what is a better approach to doing this?

- David

What I've done may not be the prettiest solution, but it works. Each
cell in the table gets assigned an ID (<TD id="R5C6">xxxxx</TD>)

Then, if a user clicks in a cell, I use event.srcElement.id to get
the ID of the clicked cell, and take it from there.

Jul 23 '05 #3
David D. wrote:
I want to be able to access cells within an HTML table, via computed
row number and column number.

I was considering using oTableID.children[] and oTR.children[]
arrays.
The - children - collection is a Microsoft extension that has also been
implemented by Opera, Konqueror, Safari and IceBrowser but has not been
copied by Mozilla or any other Gecko browser. The nearest direct W3C DOM
equivalent is the - childNodes - collection, but that is a collection of
Nodes and so it also includes non-element nodes and needs to be
traversed with an eye to the - nodeType - property of the objects found
(node.nodeType == 1 for an Element Node). While - children - is a
collection of exclusively element Nodes on IE and most other
implementing browsers (IceBrowser makes an odd decision here and
implements its - children - collection as a reference to its -
childNodes - collection, so it does contain non-element Nodes).
My question is what browsers and browser versions support this?
IE 4+, Opera 5+, Konqueror 3+ and Safari 1+ (maybe others), but not
Mozilla or any other Gecko browsers, and IceBrowser gets it wrong (at
least in version 5, version 6 has just been released and I haven't had a
chance to check it out yet).
If the children[] constructs are not fairly universally supported,
then what is a better approach to doing this?


The W3C HTML DOM specification adopted the - rows - and - cells -
properties that were introduced by Microsoft in IE 4. TABLE, THEAD,
TBODY and TFOOT elements have - rows - collections that hold references
to all the TR elements they contain. TR elements have - cells -
collections that refer to all the TD and TH elements they contain, in
order.

Those collections would be your best entry point while attempting to
refer to cells by index as they are (more or less) implemented on all
W3C HTML DOM implementing browser and IE 4+.

However, if a browser is tested and found not to implement a - rows -
collection on a, say, TABLE elements there are a number of possible
fall-back options that would give similar results:-

var tableRef = ... //assign a reference to a table element.
var rowsCollection;
if(tableRef.rows){
rowsCollection = tableRef.rows;
}else if(tableRef.getElementsByTagName){
rowsCollection = tableRef.getElementsByTagName('TR');
}else if((tableRef.all)&&(tableRef.all.tags)){
rowsCollection = tableRef.all.tags('TR');
}
if(rowsCollection){
/* We have an object, that may actually be the table's - rows -
collection (or an alternative), and it can give access to a
TR element by index.

A similar, but potentially more involved, strategy can now be
applied to that row to get to it's contained cells. More
involved because rows may contain both TD and TH cells (so -
getElementsByTagName - and - tableRef.all.tags - are not so
easy to apply as fall-back).
*/
}

Richard.
Jul 23 '05 #4
David D. wrote:
<snip>
... indexed array solution such as table.children[] and
Strictly - table.children[] - would not contain references to TR
elements as TABLE elements are only allowed to directly contain CAPTION,
COL, COLGROUP, THEAD, TFOOT and TBODY elements. It is the THEAD, TFOOT
and TBODY elements that are the direct ancestors of TH and TD elements.
And each table will contain at least one TBODY, even if no tags for the
element are provided in the HTML as TBODY opening and closing tags are
optional. A TR placed directly within a table would always imply its
containing TBODY.

<snip> ... and use the "eval" statement to reference other cells. ...> <snip>

The - eval - function is never needed to access elements (even
dynamically), see:-

<URL: http://jibbering.com/faq/#FAQ4_39 >

- and its referenced article, and:-

<URL: http://jibbering.com/faq/#FAQ4_40 >
"bruce" <br*************@glic.com> wrote in message


Please do not top-post to comp.lang.javascript.

Richard.
Jul 23 '05 #5
Richard,

Thanks for your detailed answer. This sounds like the best approach
for me to take.

Actually, I just got back from a book store where I took a look at the
latest O'Reilley DHTML book. It said that cells[] and rows[] are supported
by IE 4 and NN 6. I do not know what percentage of IE and NN browsers are
older than that. But it sounds like your approach should cover most
browsers.

I will also take a look at the links from your other posting.

Thanks.

- David

"Richard Cornford" <Ri*****@litotes.demon.co.uk> wrote in message
news:c9*******************@news.demon.co.uk...
David D. wrote:
I want to be able to access cells within an HTML table, via computed
row number and column number.

I was considering using oTableID.children[] and oTR.children[]
arrays.


The - children - collection is a Microsoft extension that has also been
implemented by Opera, Konqueror, Safari and IceBrowser but has not been
copied by Mozilla or any other Gecko browser. The nearest direct W3C DOM
equivalent is the - childNodes - collection, but that is a collection of
Nodes and so it also includes non-element nodes and needs to be
traversed with an eye to the - nodeType - property of the objects found
(node.nodeType == 1 for an Element Node). While - children - is a
collection of exclusively element Nodes on IE and most other
implementing browsers (IceBrowser makes an odd decision here and
implements its - children - collection as a reference to its -
childNodes - collection, so it does contain non-element Nodes).
My question is what browsers and browser versions support this?


IE 4+, Opera 5+, Konqueror 3+ and Safari 1+ (maybe others), but not
Mozilla or any other Gecko browsers, and IceBrowser gets it wrong (at
least in version 5, version 6 has just been released and I haven't had a
chance to check it out yet).
If the children[] constructs are not fairly universally supported,
then what is a better approach to doing this?


The W3C HTML DOM specification adopted the - rows - and - cells -
properties that were introduced by Microsoft in IE 4. TABLE, THEAD,
TBODY and TFOOT elements have - rows - collections that hold references
to all the TR elements they contain. TR elements have - cells -
collections that refer to all the TD and TH elements they contain, in
order.

Those collections would be your best entry point while attempting to
refer to cells by index as they are (more or less) implemented on all
W3C HTML DOM implementing browser and IE 4+.

However, if a browser is tested and found not to implement a - rows -
collection on a, say, TABLE elements there are a number of possible
fall-back options that would give similar results:-

var tableRef = ... //assign a reference to a table element.
var rowsCollection;
if(tableRef.rows){
rowsCollection = tableRef.rows;
}else if(tableRef.getElementsByTagName){
rowsCollection = tableRef.getElementsByTagName('TR');
}else if((tableRef.all)&&(tableRef.all.tags)){
rowsCollection = tableRef.all.tags('TR');
}
if(rowsCollection){
/* We have an object, that may actually be the table's - rows -
collection (or an alternative), and it can give access to a
TR element by index.

A similar, but potentially more involved, strategy can now be
applied to that row to get to it's contained cells. More
involved because rows may contain both TD and TH cells (so -
getElementsByTagName - and - tableRef.all.tags - are not so
easy to apply as fall-back).
*/
}

Richard.

Jul 23 '05 #6
Richard Cornford wrote:
<snip>
... . It is the THEAD, TFOOT and TBODY elements that
are the direct ancestors of TH and TD elements. ...

<snip>

Obviously that should have read: " ... are the direct ancestors of TR
elements.".

Richard.
Jul 23 '05 #7

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

Similar topics

2
by: Chris New | last post by:
G'Day All I am having trouble dynamically assigning a value to a table's cell from one frame to another frame. I've created a website that is primarily viewed in a frameset consisting of 2...
15
by: Christopher Benson-Manica | last post by:
When are named elements written with script accessible to script? <html><head><script type="text/javascript"> function ready() { alert( document.getElementsByName("div").length ); }...
4
by: jeffsal | last post by:
I am using sorttable.js to sort a table which works fine which allows a user to sort the table by clicking on the column header. Is there some code I could add to the page (onload or something) to...
1
by: Stephen | last post by:
I have got the below asp table and I would like to be able to call up the lblAddress1 label with in the asp table in the code behind page. I tried doing this.lblAddress1 and it didn't work and I...
2
by: Bass Pro | last post by:
How do I access a textbox when it was added to a table cell? I've tried using the findcontrol function with no result. I create it as such... Dim myTable As Table = New Table Dim Row as...
7
by: Kamal | last post by:
Hello all, I have a very simple html table with collapsible rows and sorting capabilities. The collapsible row is hidden with css rule (display:none). When one clicks in the left of the...
2
by: ortega23 | last post by:
Hi, I am trying to obtain the column number of the parent of a cell, if the cell is a linked cell (i.e. its value depends on another cells value). I try to read "Precedents"(parent cells) of...
6
by: Romulo NF | last post by:
Greetings again to everyone, Im back to show this grid componenet i´ve developed. With this grid you can show the data like a normal table, remove the rows that you need, add rows, import data,...
5
by: jrod11 | last post by:
hi, I found a jquery html table sorting code i have implemented. I am trying to figure out how to edit how many colums there are, but every time i remove code that I think controls how many colums...
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
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
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
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,...

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.