Example to demonstrate use of JavaScript DOM traversing wrapper functions



Results:

Column 1 Column 2 Column 3 Column 4 Column 5
Banana Apple Orange Pineapple Cranberry
Monkey Giraffe Elephant Tiger Snake
C# Java Python Ruby Haskell
France Spain Italy Germany Netherlands

The Code:


<script type="text/javascript">
window.onload = function() {    
   document.getElementById('getCellContents').onclick = getCellContents;	
}

function child(elem, index) {
    index = index || 1; 
    elem = (elem.firstChild && elem.firstChild.nodeType != 1) ?
               next(elem.firstChild) :
               elem.firstChild;				   
    for(var i=1; i < index;i++) {
	    (function() {	
		    if(elem)  
	        return elem = next(elem); 		  
	    })();		 
	}
    return elem;
}

function next(elem) {
    do {
        elem = elem.nextSibling;
    } while (elem && 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 < cells.length; i++) {
		(function() {
			cells[i].bgColor = '#ffffff';
		})();
	}
	
	if (row && column) {
		var tbody = child(table , 2);
		var selectedRow = (row <= tbody.getElementsByTagName("tr").length)? 
							child(tbody, row): null;
		var selectedCell = (selectedRow && column <= selectedRow.getElementsByTagName("td").length)? 
								child(selectedRow, column): null;	
				
	    if (selectedRow && 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;
}
</script>