开发者

Javascript issue in Internet Explorer

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜