@satico (乃木 さちこ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

URLにアンカーリンク#が残らないようにしたい

解決したいこと

ここに解決したい内容を記載してください。

URLにアンカーリンクが残らないようにしたい。

色々やってみて、デスクトップでは出来て、サーバーにアップロードすると出来なくなってしまうことはわかったのですが、どうしても原因がわかりません。初歩的なことですみませんが、よろしくお願いします。

html

<nav class="site-header">
    <ul>
        <li><a href="#top">TOP</a></li>
        <li><a href="#price">料金</a></li>
        <li><a href="#room">お部屋情報</a></li>
        <li><a href="#news">ニュース</a></li>
        <li><a href="#access">アクセス</a></li>
    </ul>
</nav>

jquery

$(function(){
  $('a[href^=#]').click(function() {
    var position = 0;
    var href= $(this).attr("href");
    if(href.indexOf('#') >= 0 && $(href).size() && href != '' && href != '#'){
      var target = $(href);
      try{
        position = target.offset().top;
      }catch(e){
      }
    }
    var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
    var speed = Math.ceil(Math.pow(Math.abs((position - scrollY)), 0.7));
    if(speed){
      $('body, html').animate({scrollTop:position}, speed, 'swing');
    }
    return false;
  });
});
0 likes

4Answer

回答ありがとうございます。助かります、、、、

私もあまり自信はないのですが、たぶん return false; が、それにあたるのではないかと思います。

少し違いますが、以下のようなサイトを参考にしたと思います。
https://office-obata.com/report/memorandum/post-435/

event.preventDefault(); を、.click(function(){ の後に入れたり、return false; のところに入れてみたりしましたが、変わりません…。。。

入れるところが全然違っていたらすみません、、、、

0Like

お手元とサーバの環境で、jQueryのバージョンなど、環境に相違はないでしょうか?

0Like

Comments

  1. @satico

    Questioner

    回答ありがとうございます。デスクトップのファイルをサーバーにあげているので、jQueryのバージョンなどは同じです…。。。
  2. OSやHTTPサーバー(apache?)など、あらゆる環境のバージョンも同一でしょうか?
  3. 'a[href^="#"]'だといけたりしません?
  4. @satico

    Questioner

    ありがとうございます。apacheは良くわかりませんが、OSや環境などは、同じパソコンでデスクトップで作ってサーバーにあげているので、多分同じかと思います。サーバーは桜インターネットです。a[href^="#"]も、やってみましたがダメでした…。。。。
  5. さくらのサーバーのOSやHTTPサーバーのアプリは、デスクトップとは異なりますよね?
    環境によって挙動が異なるのですから、環境面の相違から原因を探るのは、アプローチのひとつとして有効だと思うわけです。

    別のアプローチとして、サーバー上で該当箇所に制御が到達していないことが明らかになった(?)ようですが、`$('a').click(function() {`とかにしたら、`alert()`は表示されるのでしょうか?
    もし、表示されないならイベント関連の問題で、表示されるなら`[~]`のフィルタの問題という仮説がなり立つように思います。
  6. @satico

    Questioner

    ありがとうございます。$('a').click(function()にしてみましたが、alert()出ませんでした。。。

    桜インターネットのサーバ情報だと

    OSバージョン
    FreeBSD 9.1-RELEASE-p24 amd64

    CPU
    Intel Xeon E312xx (Sandy Bridge)

    メモリ容量
    18GB

    Webサーバ
    Apache/2.4.46

    になっていました。サーバーの環境も関係あるんですね、、、、
  7. …ということは、環境の違いで、`$('a').click(function() {`では、aタグにイベントが付かないという仮説が立てられますね。
    `$("#~").click(function(){`みたいなid要素だと付くのかな?
    あるいは、そもそもjQueryが機能していなくて、`$(~)`という表現が通らない?
    う~ん?

こんにちは。

まず最初の前提として、URLにアンカーリンクが残るのは仕様通りの挙動です。
よって、明示的にアンカーリンクを除去する必要があります。
具体的には、下記のコードをclick関数の末尾にコピペすると、アンカーリンクは除去できます。

history.replaceState(null, '', location.pathname)
0Like

Comments

  1. @satico

    Questioner

    回答ありがとうございます。コード入れてみましたがダメでした…。。。
    末尾だとrerurn: false; の前あたりかと思うのですが違うんでしょうか??

↓のように書くと、URLもアラートも表示されますが、

$(function(){
var pathName = location.pathname;
console.log(pathName);
alert("テスト");
});

↓こうすると、クリックしても表示されなくなってしまいます。。。クリックイベントに何か問題があるのでしょうか…?

$(function(){
$('a[href^=#]').click(function() {
var pathName = location.pathname;
console.log(pathName);
alert("テスト");
});
});

0Like

Comments

  1. @satico

    Questioner

    回答くださった方、ありがとうございました。

    あれから、いろいろ試して、ページ内リンクはどうにかできたのですが、別ページからのリンクが上手くいきません。よかったら、また回答いただけると非常に助かります…。。。

Your answer might help someone💌