使用JavaScript将另一个数组中的值替换为数组中的硬编码值?

时间:2010-08-12 01:43:07

标签: javascript jquery

我有一个sharepoint站点,并且想要为具有非硬编码的查询字符串值的链接创建脚本,因此我可以在几个站点上使用它而不必更改它。 HTML是一团糟,我无法改变它。

我有一些图表链接到包含更多详细信息的页面。在带有图表的页面上,我有一些过滤器,当用户选择其中一个时,页面重新加载,然后url包含查询字符串值。

使用javascript我希望图表根据查询字符串值获取链接,因此包含更多详细信息的页面反映了用户在过滤器中选择的内容。

图表中的链接看起来像 http://mysite.com/details.aspx?filter=train

要获得此链接,我有一个使用此

创建它们的脚本
goPage[0]= baseURL + filter[queryString];
goPage[1]= baseURL + filter[queryString];

我已经知道可能的查询字符串值(最多10个)所以我在数组中对它们进行了硬编码

filter[1] = 'road';
filter[2] = 'train';
filter[4] = 'horse';

所以我的问题是,如果我事先不知道查询字符串值,我该怎么做呢?

链接在html文档中动态添加,我得到所有可能的查询字符串值:

  var businessUnitID = new Array();
  $('.table404').children().children().each(function(){
  var link = ($(this).find('a').attr('href'));
  var startIndex = link.indexOf(",'");
  var endIndex = link.indexOf("');");
  if ( startIndex >= 0 && endIndex >= 0 ) {
      var linkID = link.substring( startIndex+2, endIndex );
  businessUnitID.push(linkID);
  }
  alert(businessUnitID);
  });

有什么想法吗? 提前致谢

编辑:使用更多信息更新问题

获取queryString我使用以下代码:

//从查询字符串中获取过滤器ID

function gup( filter )
{
  filter = filter.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+filter+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

var queryString = gup("SelectedID");

此外,我没有使用道路,火车等进行硬编码,而是使用

  var businessUnitName = new Array();
  $('.table404').children().children().each(function(){
  var linkText = ($(this).find('a').text());
  businessUnitName.push(linkText);
  //alert(businessUnitName);
  });

所以不要:

  var filter = new Array();
  filter[1] = businessUnitName[1];
  filter[2] = businessUnitName[2];
  filter[4] = businessUnitName[3];
  filter[5] = businessUnitName[4];
  filter[7] = businessUnitName[5];
  filter[9] = businessUnitName[6];
  filter[10] = businessUnitName[7];
  filter[11] = businessUnitName[8];
  filter[14] = businessUnitName[9];
  filter[15] = businessUnitName[10];

我想,如果例如querystring值是businessUnitID数组中的第三个值,则将filter设置为businessUnitName [3];

我希望我在这里说清楚,请问你是否还有其他问题。

1 个答案:

答案 0 :(得分:0)

我不确定你错过了什么。你不能这样做:

for(var i=0; i < businesUnitID.length; i++) {
    goPage[i] = baseURL + businesUnitID[i];
}

但是,您可以在将linkID推送到businessUnitID时添加baseURL:

如果您需要将businessUnitID与特定数字(0,1,2)相对应,那么我们需要有关如何匹配它们的更多信息。

编辑:根据您的附加信息:

我会修改你收集businesUnitIDs的方式......

var businessUnitID = new Array();
var i=0;
$('.table404').children().children().each(function(){
    var link = ($(this).find('a').attr('href'));
    var startIndex = link.indexOf(",'");
    var endIndex = link.indexOf("');");
    if ( startIndex >= 0 && endIndex >= 0 ) {
        var linkID = link.substring( startIndex+2, endIndex );
        businessUnitID[linkID] = i;
        i++;
    }
});

然后你可以使用filter = businesUnitName[businesUnitID[queryString]];