2010-03-02 110 views
31

我想在不犧牲SEO的情況下構建ajax網站。我的問題是: 如果我有這樣我的網頁上鍊接:將hashtag附加到使用javascript的URL

<a href="http://example.com/cats" id="cats">Cats</a> 
    <a href="http://example.com/dogs" id="dogs">Dogs</a> 

...點擊各個鏈接時,我想更新與相應的主題標籤的地址欄中。所以,如果點擊「貓」鏈接,當前位置將爲http://example.com/#cats,我可以用它來顯示我的ajax內容。如果javascript關閉或用戶是搜索引擎,他們將直接進入/貓

+2

只是兩個注意事項:1)這不叫「哈希標籤」(這是Twitter行話的東西完全不相關);它被稱爲片段標識符或錨點標識符(請參閱HTML規範)。 2)你不應該在元素的id中包含#符號,即它應該是id =「cats」,它將對應於/ some-url#cats。 – 2010-03-02 20:36:53

回答

44

可以更改location.hash屬性,它會改變當前的錨點標識符無須離開瀏覽構成的頁面,例如,你可以:

<a href="http://mysite.com/cats" id="cats" class="ajaxLink">Cats</a> 
<a href="http://mysite.com/dogs" id="dogs" class="ajaxLink">Dogs</a> 

然後:

$('.ajaxLink').click(function (e) { 
    location.hash = this.id; // get the clicked link id 
    e.preventDefault(); // cancel navigation 

    // get content with Ajax... 
});​ 
+1

哇!我不知道這很容易。現在我可以在ajax中創建所有未來的網站,並且仍然可以抓取我的網站並將其編入索引! :D – alooficha 2010-03-02 20:49:58

+0

但是,只有一件事,如果用戶書籤此URL或從另一個網站點擊它,id不會返回當前散列。它返回空。有針對這個的解決方法嗎?我如何檢查散列加載以及onclick? – alooficha 2010-03-02 20:54:20

+1

你只需在頁面加載時檢查'location.hash'屬性的值,它將包含標識符,包括'#'符號,例如:if(location.hash =='#dogs'){ /*...*/}' – CMS 2010-03-02 21:00:42

0

由於安全原因,您無法在javascript中重新加載頁面而無法設置window.location.href。

從我看到的一些人所說的谷歌將索引#urls,但他們將不被視爲單獨的網頁,我認爲這不是你想要的。我也很少有SEO經驗。

-1

BenMills,沒有人提到location.href,它是關於的location.hash不需要重新加載頁面。

0

雖然簡單是最好的,但如果你只是想這個過程自動化或作出那麼它genericise你可以使用這個插件精簡版jquery.hashTag.js

$('a').hashTag({ 
    source: function() { 
     return $(this).attr('id'); 
    } 
    }); 

只是把這個片斷裏面的$(document)。就緒。

它會完成其餘的工作本身。 就像自動點擊其ID爲散列的鏈接一樣。