2011-11-14 34 views
8
var data = { url: $(this).attr('href'), selector: $(this) }; 
history.pushState(data, 'foo', $(this).attr('href')); 

當我這樣做,我得到一個錯誤:如何通過jQuery對象以history.pushState

Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIDOMHistory.pushState]

如果我改變選擇爲一個字符串,那麼錯誤消失...... 但我需要jQuery對象,這樣我就可以觸發點擊它的「popstate」事件:■

回答

0

擴展Brian Nickel和GregL的答案,只要您按照兩者所建議的那樣標識DOM,就可以通過執行$('#'+ this.id).attr('href')來解決該問題。在我之前的人。

有時候我只得到我想要的結果:

var $this = $('#'+this.id); //.... before hand ... 

,它讓我能與更多的創意我的ID-ING其中,例如,我可以有$('#'+this.id+'*locator*');

... id='abGGFather' 
... id='abGFather' 
... id='abFather' 
... id='ab' 
9

在歷史狀態中的數據必須是可序列化。也就是說,它必須轉換成JSON。 $(this)返回與不能被轉換爲JSON DOM節點的陣列狀物體。你應該尋找一種不同的方式去做你正在尋找的東西。

請記住,推送狀態是只是有用的信息,並不意味着規範。如果用戶無法通過在地址欄中複製和粘貼網址來獲取完全相同的內容,則表示您遇到問題。

0

考慮分配ID或其他唯一屬性到由jQuery對象表示的DOM節點,則可以將該ID的值只是存儲在數據對象作爲一個字符串,它是可序列化。

如果元件不具有唯一的ID,考慮生成一個並將其添加到該元件。

3

您可以存儲對一個(不可序列化)豐富對象的引用,然後通過引用來回顧它。

看到一個快速演示:

var historyStateReference = { 
    url1:{/*richobj*/}, 
    url2:{/*richobj*/}  
} 
var serializableObj = { 
    richObjRef = "url1", 
    //otherProps 
} 


// pushState with a simple serializable Object 
history.pushState(serializableObj, null, "newPath"); 



// then later refrence it via history.state 
historyStateReference[history.state.richObjRef] ​ 
+0

較大的DOM元素將根據Firefox的開發頁面上創建RAM很多負載的數據存儲在硬盤上,需要 –

+0

不清楚自己是什麼時,只檢索他說,請澄清 – adardesign

+0

對不起,我考慮錯了,我會盡快刪除我的意見這個問題 –