I have a function written that searches through multiple tables looking for a device and map. Once it finds the correct cell, it returns the innerHTML to a div at the top of the page.
The function is working perfectly in Firefox but it is not working in Internet Explorer. The function is still being run in IE but it is not finding the content from the table that it is looking for.
Here is the function:
// Function for searching tables for specific map/device combination.
function findMap(map, device)
{
var flag = false; // to check if the map has been found yet
// Add <strong> tags to map string so it is easier to search for
var mapstring = "<strong>" + map;
// create array of tables
var tables = document.getElementsByTagName('table');
for (var t = 2; t < tables.length; t++)
{
// create array of rows
var tablerows = tables[t].getElementsByTagName("tr");
for (var r = 2; r < tablerows.length; r++)
{
currentRow = tablerows[r];
// Check if current row contains map name
if (currentRow.innerHTML.match(mapstring))
{
var tablecells = currentRow.getElementsByTagName("td");
for (var c = 1; c < tablecells.length; c++)
{
currentCell = tablecells[c];
// Check if current cell contains device name
if (currentCell.innerHTML.match(device))
{
document.getElementById("boxy2").innerHTML = currentCell.innerHTML;
flag = true;
}
if (flag == true) return;
}
if (flag == true) return;
// search for x20 if 920 was not found etc
if (device == "910")
device = "x10";
else if (device == "920")
device = "x20";
else if (device == "930")
device = "x30";
else if (device == "940")
device = "x40";
else if (device == "950")
device = "x50";
// search cells again
for (var c = 1; c < tablecells.length; c++)
{
currentCell = tablecells[c];
if (currentCell.innerHTML.match(device))
{
document.getEl开发者_Python百科ementById("boxy2").innerHTML = currentCell.innerHTML;
flag = true;
}
if (flag == true) return;
}
if (flag == true) return;
}
if (flag == true) return; else { document.getElementById("boxy2").innerHTML="Map not available on this device."; }
}
}
}
Any help with this matter would be greatly appreciated.
Thanks.
I think the issue may be with this line:
var mapstring = "<strong>" + map;
I believe IE reports the tag names in uppercase, so this line would fail:
if (currentRow.innerHTML.match(mapstring))
Try making it case insensitive:
var map_regex = new RegExp( mapstring,'i');
if (currentRow.innerHTML.match(map_regex))
(A little off topic, but it seems that you've forgotten to declare a couple variables with var
unless they're somewhere else in your code. Just thought I'd mention it.)
You should try to replace tables[t].getElementsByTagName("tr")
by tables[t].rows
, and currentRow.getElementsByTagName("td")
by currentRow.cells
. In case you want to extend your script later, it might also be safer to give your tables an ID each and then get them via getElementById
instead of getElementsByTagName
.
精彩评论