Javascript 与拆分数组
我想要实现的目标很简单。我希望按钮的文本根据您所在的页面而变化。
我使用以下内容开始:
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
高一级。但这通常不是问题,因为如果
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
,这对于查询字符串和带有
/
的片段标识符会失败。
(另请参阅
protocol
、
host
、
port
、
search
、
hash
了解 URL 的其他部分。)
我不认为字符串拆分是这里的最佳方法。我会使用 RegEx 来实现。
var reStations = /\/stations(\/)?/i;
if (reStations.test(document.location.href))
//Do whatever
不确定您正在寻找什么,看看这个是否合适:
var loc_array = document.location.href.split('/');
// this will loop through all parts
foreach (var i in loc_array) {
switch (loc_array[i]) {
case "stations":
// do something
break;
// other cases
}
}
// or if you want to check each specific element
switch (loc_array[0]) {
case "stations": // assuming /stations/[something/]
if (typeof loc_array[1] != 'undefined' && loc_array[1] == "something") {
// do things
}
break;
}