現在のページのURLのハッシュの後に値を取得し、これを新しい関数に適用できるようにしたい...
URLは
www.example.com/index.html#foo
そして、私はこれを次のコードと組み合わせて使用したいと思います
$('ul#foo:first').show();
私はこれをつかみ、それを変数に変えて2番目のコードで使用できる方法があると仮定/期待しています。
編集者注:以下のアプローチには深刻なセキュリティへの影響、および使用しているjQueryのバージョンによっては、ユーザーをXSS攻撃にさらす可能性があります。詳細については、この回答のコメントで考えられる攻撃の説明を参照するか、または セキュリティスタック交換に関するこの説明 。
location.hash
プロパティを使用して、現在のページのハッシュを取得できます。
var hash = window.location.hash;
$('ul'+hash+':first').show();
このプロパティにはすでに#
シンボルが最初に含まれていることに注意してください。
IDセレクター を使用しているため、実際には:first
擬似セレクターは必要ありません。IDはunique DOM内。
URL文字列からハッシュを取得する場合は、 String.substring
メソッドを使用できます。
var url = "http://example.com/file.htm#foo";
var hash = url.substring(url.indexOf('#')); // '#foo'
アドバイス:ユーザーはハッシュを必要に応じて変更できることに注意してください 、セレクタに何かを注入する場合、ハッシュを使用する前にチェックする必要があります。
IEではlocation.hashは安全ではありません、IE(IE9を含む)の場合、ページにiframeが含まれている場合、iframeコンテンツ内の手動更新後にlocation.hashの値はold(最初のページのロードの値)。手動で取得した値はlocation.hashとは異なるため、常にdocument.URLから取得します
var hash = document.URL.substr(document.URL.indexOf('#')+1)
純粋なJavaScriptソリューションをお探しの方へ
document.getElementById(location.hash.substring(1)).style.display = 'block'
これで時間を節約できることを願っています。
JQuery 1.9以降、 :target
セレクターはURLハッシュと一致します。だからあなたができる:
$(":target").show(); // or $("ul:target").show();
ハッシュに一致するIDを持つ要素を選択して表示します。
現在のページにハッシュがある場合は、最初にcekをお勧めします。それ以外の場合、undefined
になります。
$(window).on('load', function(){
if( location.hash && location.hash.length ) {
var hash = decodeURIComponent(location.hash.substr(1));
$('ul'+hash+':first').show();;
}
});