【问题标题】:PHP & jQuery - Change href depending on body class or scrolltop?PHP & jQuery - 根据正文类或滚动条更改href?
【发布时间】:2016-07-07 18:15:15
【问题描述】:

如果从主页(一页滚动网站)单击,我希望徽标的 onclick 滚动到顶部(主页),如果在内部页面上单击,则徽标链接保留为网站 url。

我的客户基本上不希望网站从主页重新加载徽标。

最好的方法是什么?到目前为止,我已经想到了两种方法...

  1. 将 href 属性替换为 url + body 类(我的菜单链接使用这个并滚动到每个部分而不重新加载页面)
  2. 如果在body hasclass .home 时点击logo,滚动到窗口顶部。但我不确定这是否会覆盖主题设置的 url?

这是如何从 partials/menus.php 文件中设置徽标 href 的 sn-p...

$logoDiv = '<a href="'.esc_url( home_url( '/' ) ).'" class="navbar-brand" data-minheight="'.(($LOGO->logo_min == "") ? "20" : esc_attr($LOGO->logo_min)).'">';

我在 Wordpress 上使用 Uncode 主题。而且我是 PHP 和 jQuery 的新手...只是一个建议作为解决此问题的最佳方法将不胜感激,我可以自己尝试解决它!

谢谢你:)

【问题讨论】:

  • 肮脏的把戏:拥有href='#' 将滚动到顶部而不需要 JavaScript(除非你想为滚动设置动画)。
  • 好的,太好了...所以你认为我可以用我的第一个想法来使用它,即使用 jquery 替换 href 属性吗?也许是这样的...... $(document).ready(function() { if($(body).hasClass("home")){ $(".navbar-brand[href='ldngrp.co']").attr('href', ' #') } });

标签: php jquery wordpress class href


【解决方案1】:

你可以使用下面的代码

$logoDiv = '<a href="javascript:void(0)" class="navbar-brand" data-minheight="'.(($LOGO->logo_min == "") ? "20" : esc_attr($LOGO->logo_min)).'" onclick="window.scrollTo(0,0);">';

希望对你有帮助

【讨论】:

  • 您好,谢谢!所以我可以在 php 文件中说......如果:get_body_class 'home' 然后做你的建议,否则 - 原始功能?
  • 是的,你应该尝试一次。
【解决方案2】:

可以在渲染页面前检查当前链接是否为首页:

$href = ($_SERVER["REQUEST_URI"]==home_url("","relative")?"#":esc_url( home_url( '/' ) ))

$logoDiv = '<a href="'.$href.'" class="navbar-brand" data-minheight="'.(($LOGO->logo_min == "") ? "20" : esc_attr($LOGO->logo_min)).'">';

如果您希望为滚动设置动画,则可以添加以下 jQuery:

$("[href='#']").on("click", function (e) {
    e.preventDefault();
     $('html, body').animate({
        scrollTop: 0
     });
});

这适用于所有带有href='#' 的链接,如果你想限制它,你需要一个更具体的选择器。

正如您的评论所暗示的,如果您有办法确定当前页面是否是主页,您也可以使用 jQuery 执行此操作。

您的解决方案应该有效:

$(document).ready(function() { 
    if($(body).hasClass("home")){ 
        $(".navbar-brand[href='ldngrp.co']").attr('href', '#'); 
     }
}); 

【讨论】:

  • 太棒了,谢谢你的解释......我会玩一玩的!
  • $_SERVER["REQUEST_URI"] 有可能会在末尾附加一个/home_url 不会,最好先检查主页中$_SERVER["REQUEST_URI"] 包含的内容(或者只使用trim($_SERVER["REQUEST_URI"]),"/")
  • 嗨!所以我把 php 放在 if 和 else 语句中,并用一个新文件覆盖父文件...没有任何改变...这是我使用的 php 代码... if($href =($ _SERVER["REQUEST_URI"]==home_url("","re​​lative")?"#":esc_url( home_url( '/' ) ))) { $logoDiv = 'logo_min)).'">'; } else { $logoDiv = 'logo_min)).'">'; }
  • 你为什么把它放在if else 声明中?
  • 一开始我没有,什么都没发生,然后我觉得这很有意义......当然,你需要检查url是否是主页然后将href设置为#,否则做什么原来在那里?
猜你喜欢
  • 2016-01-09
  • 2011-05-30
  • 2021-03-05
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多