从单个文件在站点的特定页面上执行自定义JavaScript

zmo*_*mol 7 javascript jquery

我的js文件加载到所有页面上.某些功能仅适用于某些页面,例如仅限主页http://site.com.javascript可以读取它正在调用的页面的URL来确定它是否是主页?

jha*_*rtz 9

您可以使用window.location对象获取有关该位置的属性.一些值得注意的属性是:

  • window.location.href - 返回当前页面的完整URL
  • window.location.hostname - 仅返回主机名(域名,包括任何子域)
    • 例如:www.google.com
  • window.location.pathname - 仅返回路径(主机名/域后面的部分,但不包括查询字符串(以"?"开头的URL的一部分)或散列(以"#"开头的URL的一部分))
    • 例如:/subdir/subpage.html

虽然这一切都运行良好,但我建议(就像其他人提到的那样)做服务器端会更好.服务器通常可以比客户端做更好的事情.

此外,如果您将所有JS代码放在一个中央文件中,您可以直接向页面(在服务器上)添加这样的内容,以触发该页面的事件,这可能比JS位置嗅探更可靠:

<script type="text/javascript">
// jQuery example
$(document).ready(function () {
    // Run function that is specific for this page
    MyNamespace.initHome();
});
</script>
Run Code Online (Sandbox Code Playgroud)


Phr*_*ogz 5

id<body>每个页面的元素上放置一个唯一的属性,并使用它来确定JS应该做什么.这是我用我的单个缩小文件做的,它(一旦它连接许多较小的JS文件)看起来基本上像:

jQuery(function($){
  if (!$('body#home').length) return;
  //... code specific to the home page
});

jQuery(function($){
  if (!$('body#contact').length) return;
  //... code specific to the contact page
});

// etc. for each page
Run Code Online (Sandbox Code Playgroud)

但您可以轻松编写更高效的单个文件:

jQuery(function($){
  if ($('body#home').length){
    //... code specific to the home page
  }
  if ($('body#contact').length){
    //... code specific to the contact page
  }
});
Run Code Online (Sandbox Code Playgroud)