バイオリンクをアクティブに設定しmysite.com/photos/#/bio
たいと思いますか?つまり、URLの最後の「単語」です。
これを実現するには、次のようにします。
var path = window.location.pathname.split("\/"), myString;
if(path[path.length-1] === "")
myString = path[path.length-2];
else
myString = path[path.length-1];
myString = myString.toLowerCase()
console.log(myString);
パス名が「/hola/ bandola /」の場合、分割後の配列の最後の要素は空の文字列になりますが、「/ hola / bandola」だけの場合、「bandola」は最後のアイテム。したがって、両方の方法で機能させるには、チェックが必要です。これで、正しい文字列を持つその変数ができ、その情報でアクティブになるように正しいリンクを設定できます。
編集:ナビゲーションリンクを動的に生成しないため、コードから取得した値を、ナビゲーションリンクごとに一意の値と比較する必要があります。私の提案は、私のコードから取得した文字列と一致するデータ属性をa-tagsに追加することです。例:<li><a href="mysite.com/photos" data-page="photos">Photos</li>
次に、ULの各aタグを調べて、データページの値をクエリ文字列から取得した値と比較し、一致する場合はクラスを「アクティブ」に設定します。
var links = $("#main-menu").find("a");
$.each(links, function() {
if($(this).data("page") === myString)
$(this).addClass("active");
});
aタグ内のテキストを比較することもできますが、テキストがurl-stringと一致しない場合は機能しないため、データ属性を追加することをお勧めします。上記のコードを編集して、データ属性と比較するときに「myString」変数が小文字になるようにしたことに注意してください。ご理解いただければ幸いです。
EDIT2:
代わりにa-tag内のテキストを比較するには、代わりに次の各ループを使用します。
var links = $("#main-menu").find("a");
$.each(links, function() {
if($(this).html("page").toLowerCase() === myString)
$(this).addClass("active");
});