Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>It's because you're using <code>childNodes</code> and whitespaces in the DOM are considered to be text nodes by Firefox et. al but not IE</p> <p>See <a href="https://stackoverflow.com/questions/868407/hide-an-elements-next-sibling-with-javascript/868418#868418">this answer</a> for an explanation</p> <p>My suggestions </p> <p>1.Set up some wrapper functions that ignore any <a href="http://www.javascriptkit.com/domref/nodetype.shtml" rel="nofollow noreferrer"><code>nodeType</code></a> other than 1 (<code>ELEMENT_NODE</code>) to do DOM traversing. Something like</p> <pre><code>function child(elem, index) { // if index is not supplied, default is 1 // you might be more comfortable making this 0-based // in which case change i initial assignment value to 0 too index = index || 1; // get first child element node of elem elem = (elem.firstChild &amp;&amp; elem.firstChild.nodeType != 1) ? next(elem.firstChild) : elem.firstChild; // use the index to move to nth-child element node for(var i=1; i &lt; index;i++) { (function() { return elem = next(elem); })(); } return elem; } function next(elem) { do { elem = elem.nextSibling; } while (elem &amp;&amp; elem.nodeType != 1); return elem; } </code></pre> <p>and use like so - <a href="http://jsbin.com/ajafi" rel="nofollow noreferrer"><strong>Working Demo</strong></a> - (Code at the bottom of the answer for reference)</p> <pre><code>&lt;table id="myTable"&gt; &lt;thead&gt; ... &lt;/thead&gt; &lt;tbody&gt; ... &lt;/tbody&gt; &lt;/table&gt; &lt;script type="text/javascript"&gt; child(document.getElementById('myTable'), 2); // will get the tbody &lt;/script&gt; </code></pre> <p>2.Use <code>getElementbyId()</code>, <code>getElementsByTagName()</code> or <code>getElementsByName()</code> instead of relying on position in the DOM</p> <p>3.Use a JavaScript library that abstracts away browser differences (<a href="http://www.jquery.com" rel="nofollow noreferrer">jQuery</a> comes highly recommended)</p> <p><strong>The Demo Code</strong></p> <pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt; &lt;head&gt; &lt;script type="text/javascript"&gt; window.onload = function() { document.getElementById('getCellContents').onclick = getCellContents; } function child(elem, index) { index = index || 1; elem = (elem.firstChild &amp;&amp; elem.firstChild.nodeType != 1) ? next(elem.firstChild) : elem.firstChild; for(var i=1; i &lt; index;i++) { (function() { return elem = next(elem); })(); } return elem; } function next(elem) { do { elem = elem.nextSibling; } while (elem &amp;&amp; elem.nodeType != 1); return elem; } function getCellContents() { var row = parseInt(document.getElementById('row').value, 10); var column = parseInt(document.getElementById('column').value, 10); var result; var color; var table = document.getElementById('table'); var cells = table.getElementsByTagName('td'); for (var i= 0; i &lt; cells.length; i++) { (function() { cells[i].bgColor = '#ffffff'; })(); } if (row &amp;&amp; column) { var tbody = child(table , 2); var selectedRow = (row &lt;= tbody.getElementsByTagName("tr").length)? child(tbody, row): null; var selectedCell = (selectedRow &amp;&amp; column &lt;= selectedRow.getElementsByTagName("td").length)? child(selectedRow, column): null; if (selectedRow &amp;&amp; selectedCell) { selectedCell.bgColor = '#00ff00'; result = selectedCell.innerHTML; color = '#b7b7b7'; } else { result = 'Cell does not exist'; color = '#ff0000'; } } else { result = 'You must provide numeric arguments for Row and Column Number'; color = '#ff0000'; } var results = document.getElementById('results'); results.innerHTML = result; results.style.color = color; } &lt;/script&gt; &lt;title&gt;DOM Traversal&lt;/title&gt; &lt;meta http-equiv="Content-type" content="text/html; charset=utf-8" /&gt; &lt;style type="text/css"&gt; body { font-family: Verdana, Helvetica, Arial; font-size: 0.8em; } h2 { text-align:center; } table { border: 1px solid #000; border-collapse: collapse; } th, td { border: 1px solid #000; padding: 2px; } fieldset { border: 0; } label { display: block; width: 120px; text-align: right; float: left; padding-right: 10px; margin: 5px 0; } input { margin: 5px 0; } input.text { padding: 0 0 0 3px; width: 172px; } input.button { margin: 15px 0 0 130px; } span { font-weight: bold; color: #b7b7b7; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;h2&gt;Example to demonstrate use of JavaScript DOM traversing wrapper functions&lt;/h2&gt; &lt;div style="margin: 0 auto; width: 600px;"&gt; &lt;fieldset&gt; &lt;label for="row"&gt;Row Number:&lt;/label&gt;&lt;input id="row" class="text" type="text" /&gt;&lt;br/&gt; &lt;label for="column"&gt;Column Number:&lt;/label&gt;&lt;input id="column" class="text" type="text" /&gt;&lt;br/&gt; &lt;input id="getCellContents" type="button" class="button" value="Get Cell Contents" /&gt; &lt;/fieldset&gt; &lt;p&gt;Results: &lt;span id="results"&gt;&lt;/span&gt;&lt;/p&gt; &lt;table id="table"&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Column 1&lt;/th&gt; &lt;th&gt;Column 2&lt;/th&gt; &lt;th&gt;Column 3&lt;/th&gt; &lt;th&gt;Column 4&lt;/th&gt; &lt;th&gt;Column 5&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Banana&lt;/td&gt; &lt;td&gt;Apple&lt;/td&gt; &lt;td&gt;Orange&lt;/td&gt; &lt;td&gt;Pineapple&lt;/td&gt; &lt;td&gt;Cranberry&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Monkey&lt;/td&gt; &lt;td&gt;Giraffe&lt;/td&gt; &lt;td&gt;Elephant&lt;/td&gt; &lt;td&gt;Tiger&lt;/td&gt; &lt;td&gt;Snake&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;C#&lt;/td&gt; &lt;td&gt;Java&lt;/td&gt; &lt;td&gt;Python&lt;/td&gt; &lt;td&gt;Ruby&lt;/td&gt; &lt;td&gt;Haskell&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;France&lt;/td&gt; &lt;td&gt;Spain&lt;/td&gt; &lt;td&gt;Italy&lt;/td&gt; &lt;td&gt;Germany&lt;/td&gt; &lt;td&gt;Netherlands&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p style="font-weight:bold;"&gt;The Code: &lt;pre&gt;&lt;code&gt; &amp;lt;script type="text/javascript"&amp;gt; window.onload = function() { document.getElementById('getCellContents').onclick = getCellContents; } function child(elem, index) { index = index || 1; elem = (elem.firstChild &amp;&amp; elem.firstChild.nodeType != 1) ? next(elem.firstChild) : elem.firstChild; for(var i=1; i &lt; index;i++) { (function() { if(elem) return elem = next(elem); })(); } return elem; } function next(elem) { do { elem = elem.nextSibling; } while (elem &amp;&amp; elem.nodeType != 1); return elem; } function getCellContents() { var row = parseInt(document.getElementById('row').value, 10); var column = parseInt(document.getElementById('column').value, 10); var result; var color; var table = document.getElementById('table'); var cells = table.getElementsByTagName('td'); for (var i= 0; i &lt; cells.length; i++) { (function() { cells[i].bgColor = '#ffffff'; })(); } if (row &amp;&amp; column) { var tbody = child(table , 2); var selectedRow = (row &lt;= tbody.getElementsByTagName("tr").length)? child(tbody, row): null; var selectedCell = (selectedRow &amp;&amp; column &lt;= selectedRow.getElementsByTagName("td").length)? child(selectedRow, column): null; if (selectedRow &amp;&amp; selectedCell) { selectedCell.bgColor = '#00ff00'; result = selectedCell.innerHTML; color = '#b7b7b7'; } else { result = 'Cell does not exist'; color = '#ff0000'; } } else { result = 'You must provide numeric arguments for Row and Column Number'; color = '#ff0000'; } var results = document.getElementById('results'); results.innerHTML = result; results.style.color = color; } &amp;lt;/script&amp;gt; &lt;/code&gt; &lt;/pre&gt; &lt;/p&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload