Javascript search issue
I have a piece of code that searches through a table looking for a certain phrase. Once it finds the phrase, it returns the innerHTML of the current cell to a div near the top of the page.
The problem I am having is this :
The code works flawlessly unless the phrase being searched for contains any special characters (brackets and ampersands etc). I have tried modifying the phrase from "Western & Central"
to "Western & Central"
but unfortunately the code is still unable to locate the phrase.
Heres the code:
// 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;
var map_regex = new RegExp( mapstring,'i');
// 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].rows;
for (var r = 2; r < tablerows.length; r++)
{
currentRow = tablerows[r];
// Check if current row contains map name
if (currentRow.innerHTML.match(map_regex))
{
var tablecells = currentRow.cells;
开发者_StackOverflowfor (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.getElementById("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!
As you are just wanting to check for presence of a specific string, I think your solution will probably be more robust if you use indexOf rather than RegExps.
Using RegExps, if you are looking for special characters eg [
or ]
or (
or )
then you will need to escape them, this is just another layer of complexity which I don't think you need to introduce.
So try replacing regex usages such as...
if (currentRow.innerHTML.match(map_regex))
with this...
if (currentRow.innerHTML.indexOf(mapString)!=-1)
精彩评论