【问题标题】:If URL contains anything, then fire a Javascript function如果 URL 包含任何内容,则触发 Javascript 函数
【发布时间】:2013-01-09 03:36:37
【问题描述】:

基本上,如果 URL/window.location 绝对包含任何变量(当然是过去的 domain.com/),我希望 javascript 执行某些操作。

目前,我有以下 jQuery 代码,它仅在 window.location 包含确切的措辞“#hash”时执行,但如前所述,我想扩展所有变量的功能。

编辑:抱歉,澄清一下,变量是指以下任何一个示例:

  • domain.com/#hash
  • domain.com/#hash2
  • domain.com/子/文件夹
  • domain.com/textwithoutahash

另外,如果有人知道如何在基本的 Javascript 中做到这一点并且不需要 jQuery 库,那将是一个额外的好处!

$(function() {
    if ( window.location.href.indexOf('#hash') > -1 ) {
        myfunctionhere;
    }
});

【问题讨论】:

  • 奖励:“另外,如果有人知道如何在基本的 Javascript 中做到这一点,并且不需要 jQuery 库,那将是一个额外的奖励!”
  • 正如所写,您不需要 jQuery 库。
  • $(function() {});实际上是一个 jquery 快捷方式,所以,是的,你确实需要 jQuery。
  • 你也不想domain.com/?some=variable这样的东西吗?
  • @Adam 但你特别说“正如所写,你不需要 jQuery”。我说的是他“写的”,因为他使用的是 $(function() {}) 当然它可以用 Vanilla javascript 编写,一切都可以。但是上面的“AS WRITTEN”,他需要jQuery。

标签: javascript jquery


【解决方案1】:

请参阅最后的更新以说明您的说明

将脚本放在页面末尾,就在关闭</body>之前,并且:

如果“变量”是指文档片段标识符(“哈希”),那么:

<script>
if (location.hash) {
    callYourFunction();
}
</script>

如果“变量”是指查询字符串,那么

<script>
if (location.search) {
    callYourFunction();
}
</script>

如果“变量”是指资源名称,例如,不是http://domain.com,而是http://domain.com/page,那么:

<script>
if (location.pathname && location.pathname !== "/") {
    callYourFunction();
}
</script>

更多关于位置对象on MDN


再澄清一下:

编辑:抱歉,澄清一下,变量是指以下任何一个示例:

这些例子归结为hashpathname 或两者兼有,所以:

<script>
if ((location.pathname && location.pathname !== "/") || location.hash) {
    callYourFunction();
}
</script>

...当然,如果您还想处理http://domain.com?foo=bar,那么也添加search

<script>
if ((location.pathname && location.pathname !== "/") ||
    location.search ||
    location.hash) {

    callYourFunction();
}
</script>

【讨论】:

  • @FlorianMargaine:我没有关注你。无论是否有资源名称,hash 都能可靠地工作,并且哈希不包含在 searchpathname 中。
  • @Ian:谢谢。是的,起初我从字面上理解“变量”这个词并假设为search。 :-)
  • @T.J.Crowder 哈哈是的,我也假设了很多。如果我们事先从这些编辑中获得现在问题中的信息,那就太好了
  • 好吧,在你最后一次编辑之后,我最好推荐我的答案:P
  • @AndyDwyer 我会推荐这个解决方案,因为我在答案中使用的filter 函数在 IE8 中不起作用。您可以添加 shim 或使用 jQuery 的过滤器,但 TJ 的答案已经足够好,不需要外部依赖。
【解决方案2】:

您可以检查是否有hashpathnamesearch

或者,为了简化,你可以简单地使用这个:

if (window.location.href.split('/').filter(Boolean).length > 2) {
    callYourFunction();
}

window.location.href 就是整个 URL。如果域后面有东西,就会显示出来。

以下情况会触发此功能:

  • domain.com/some/path
  • domain.com/#hash
  • domain.com/?some=variable

【讨论】:

  • “简化”?我想不是。 :-)
  • @T.J.Crowder 好吧,我只是检查一个属性:P
【解决方案3】:

您可以检查window.locationsearch 属性是否设置为某个值。另外,您可以查看hash 属性:

if (window.location.search || window.location.hash) {
  yourfunctionhere();
}

要在不使用 jQuery 的情况下调用它,只需将其包含在“onload”脚本中即可:

<script type='text/javascript'>
  document.onload = function () {
    if (window.location.search || window.location.hash) {
      yourfunctionhere();
    }
  }
</script>

【讨论】:

  • 这仅包括?key=value#hash...不包括/path/to/page
  • 原帖中没有明确提到 /path/to/page :)
猜你喜欢
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
相关资源
最近更新 更多