我想要完成的事情很简单。我希望按钮的文本根据您所在的页面而变化。
我通过使用以下内容开始:
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
,这会失败用于其中包含 /
的查询字符串和片段标识符。
(另请参阅协议(protocol)
、主机
、端口
、搜索
、哈希
对于 URL 的其他部分。)
关于JavaScript 和分割数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3232182/