我要完成的事情很简单。我希望按钮的文本根据您所在的页面而改变。

我通过使用以下内容开始:

var loc_array = document.location.href.split('/');


现在我有了url并将其拆分为一个数组,我可以根据位置获取某些目录,如下所示:

if (loc_array[loc_array.length-1] == 'stations'){
  var newT = document.createTextNode("Stations & Maps");
}


现在,如果目录为/ test / stations /,则可以使用,但是如果有人输入/test/stations/index.html,则它将无法使用。如何在不抛出其他if语句或不使用类似条件的情况下对此进行测试。

最佳答案

实际上,两个示例的工作原理相同。 /stations//stations/index.html都分成两个字符串; /stations/在结尾处有一个空字符串。因此length-2会起作用。 /stations无效,这是一个更高的级别。但这通常不是问题,因为如果stations是静态目录,Web服务器将使用斜杠将浏览器重定向到/stations/

如果您自己进行路由,那将不会发生。如果要进行路由,从路径部分列表的末尾开始索引不是一个好主意,例如,可能有任何旧的垃圾作为路径参数传递。 /stations/region1/stationname2。在这种情况下,您应该从头开始索引。

如果可以将应用程序安装在除根目录之外的其他路径上,则需要告诉JavaScript该根目录的路径,以便可以确定要跳过多少个斜杠。您可能还需要将其告知其他目的,例如,如果它动态创建了任何图像,则需要知道根目录才能确定要从中获取图像的目录。

var BASE= '/path-to/mysite';
var BASELEVEL= BASE.split('/').length;
...

var pagename= location.pathname.split('/')[BASELEVEL];
// '/path-to/mysite/stations/something' -> 'stations'


我正在使用location.pathname仅提取URL的路径部分,而不是尝试使用字符串或正则表达式方法将href分开,这对于其中带有/的查询字符串和片段标识符将失败。

(有关URL的其他部分,另请参见protocolhostportsearchhash。)

关于javascript - Javascript和拆分数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3232182/

10-09 23:27