JavaScript 和分割数组

标签 javascript html dom if-statement

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

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

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/

相关文章:

javascript - Nodejs Express 中翻译 url 的路由

php - 通过 php 在 html 元素的属性中打印特殊字符

html - 输入字段名称的最大大小?

jquery - 监听 HTML 导航事件

java - 如何在java中使用DOM解析xml

javascript - 在 Google map 上处理 ctrl+click

javascript - mousedown 事件未在平板电脑/手机、HTML5 Canvas 上触发

javascript - 我怎样才能使一个div保持在另外两个与jqueryui幻灯片同步的div下方?

Javascript 函数导致 HTML 页面重新加载 : why?

javascript - React 中是否可以重新挂载组件?