2012-07-09 13 views
9

前にしたハッシュ値を取得し、jsが私はハッシュの変更は、それが可能な.Is前にしたハッシュ値を取得したい私のHTMLは</p> <pre><code><a href="#one">One</a> <a href="#two">Two</a> </code></pre> <p>あるとしなhashchange

$(window).on("hashchange"){ 
alert(document.location.hash); 
} 

ある?場合はい、どうですか?

+0

が重複する可能性:http://stackoverflow.com/questions/680785/on-window-location-hash-change – undefined

+0

@undefinedない正確 –

答えて

10

使用

$(window).on("hashchange", function(e){ 
    console.log(e.originalEvent.oldURL) 
    console.log(e.originalEvent.newURL) 
})​; 

そのデモ:http://jsbin.com/ulumil/

+1

何であるか、ブラウザとOS未定義 –

+0

を与えていますあなたは – Amit

+2

Mozilla Firefoxとos Windows 7を使用していますが、私は十字ブラウザの互換性のある回答を希望していますので、質問しないでください。 –

6

あなたは、たとえば、最後のハッシュを追跡する必要があります。

var currentHash = function() { 
    return location.hash.replace(/^#/, '') 
} 

var last_hash 
var hash = currentHash() 

$(window).bind('hashchange', function(event){ 
    last_hash = hash 
    hash = currentHash() 
    console.log('hash changed from ' + last_hash + ' to ' + hash) 
}); 
+1

これはIE9で動作しないようです。 'event.fragment'も未定義です。 'location.hash.replace(/ ^#/、 '')' –

+0

@rparreeありがとう、私の答えを改善してそれを置き換える必要がありました。 –

2

実際アミットが提供するソリューションは、jQueryライブラリではなく動作し、クロスプラットホームも同様です。

ここでは、コアのJavaScriptとクロスブラウザーを使用した、より単純なソリューションです。 (IE/FF /クローム/サファリの最新版で確認)

window.onhashchange = function(e){ 
    console.log(e); 
    var oldURL = e.oldURL; 
    var newURL = e.newURL; 
    console.log("old url = " + oldURL); 
    console.log("new url = " + newURL); 
    var oldHash = oldURL.split("#")[1]; 
    var newHash = newURL.split("#")[1]; 
    console.log(oldHash); 
    console.log(newHash); 
}; 
+0

FF12では動作しません。他のブラウザはチェックしていません。 – jldupont

+0

上記のとおり、これは(IE/FF/Chrome/Safari)の最新バージョンで動作します。コードはうまくテストされ、4つのブラウザすべてで私のために働いています。私はFF12が最新のブラウザであるかどうかわかりません。私がテストしたとき、私のFFバージョンはFF20.0でした。

eの値(2行目で完了)を確認し、変数oldURLおよびnewURL(e.oldURLおよびe.newURL)が存在する場合はそれを見つけることができます。がんばろう。 –

+0

私はLinuxでFF19を意味しました。とにかく、私は 'window.location.hash'を使用しています。これははるかに信頼性が高いようです。 – jldupont

0

は、それはあまりにも、おそらく他の場所でIEで動作しません

$(window).on("hashchange", function(e){ 
    console.log(e.originalEvent.oldURL) 
    console.log(e.originalEvent.newURL) 
})​; 

を使用しないでください。

これをむしろ使用してください。

(function(w, $){ 
    var UrlHashMonitor = {}; 
    UrlHashMonitor.oldHash = ''; 
    UrlHashMonitor.newHash = ''; 
    UrlHashMonitor.oldHref = ''; 
    UrlHashMonitor.newHref = ''; 
    UrlHashMonitor.onHashChange = function(f){ 
    $(window).on('hashchange', function(e){ 
     UrlHashMonitor.oldHash = UrlHashMonitor.newHash; 
     UrlHashMonitor.newHash = w.location.hash; 
     UrlHashMonitor.oldHref = UrlHashMonitor.newHref; 
     UrlHashMonitor.newHref = w.location.href; 
     f(e); 
    }); 
    }; 
    UrlHashMonitor.init = function(){ 
    UrlHashMonitor.oldHash = UrlHashMonitor.newHash = w.location.hash; 
    UrlHashMonitor.oldHref = UrlHashMonitor.newHref = w.location.href; 
    }; 
    w.UrlHashMonitor = UrlHashMonitor; 
    return UrlHashMonitor; 

})(window, window.jQuery); 

/* 
* USAGE EXAMPLE 
*/ 
UrlHashMonitor.init(); 
UrlHashMonitor.onHashChange(function(){ 
    console.log('oldHash: ' + UrlHashMonitor.oldHash); 
    console.log('newHash: ' + UrlHashMonitor.newHash); 
    console.log('oldHref: ' + UrlHashMonitor.oldHref); 
    console.log('newHref: ' + UrlHashMonitor.newHref); 
    //do other stuff 
}); 

これは最新のすべてのブラウザで有効です。

DEMO:https://output.jsbin.com/qafupu#one

関連する問題