2012-06-12 50 views
3

我試圖保存一個DOM節點後插入它在同一網站的另一個頁面。保存DOM元素以在後續頁面使用(Chrome擴展)

我使用jQuery和我的擴展名。我在content_script.js中做的是:

var variableToStore = localStorage["variableToStore"]; 

if (variableToStore == null) { 
    localStorage["variableToStore"] = jQuery("#myDomNode").clone(); 
    variableToStore = localStorage["variableToStore"]; 
} 

variableToStore.insertAfter(jQuery("#someelementofanotherpage")); 

我在做什麼錯了? localStorage無法保存DOM對象?如果不是,我怎麼能達到我的目標?

謝謝。

+0

恐怕會只保存myDomNode的孩子 – Francois

回答

3

簡而言之,不,您不能將DOM元素存儲在本地存儲中。即使jStorage插件,你不能存儲在本地存儲的DOM元素在介紹文字說:http://www.jstorage.info/

可以在本地存儲的JavaScript保存的HTML編碼的字符串,然後將其轉換回HTML後(參見this Q&A對於在這方面的幫助)

+0

感謝您的解釋,@ BumbleB2na!我編碼的HTML字符串,存儲它,並檢索成功的HTML! –

1

您可以保存的HTML代碼字符串代替,試試這個:

var div=$('<div></div>'); 
$("#myDomNode").clone().appendTo(div); 
localStorage["variableToStore"] = escape(div.html()); 
... 
var variableToStore = unescape(localStorage["variableToStore"]); 
$(variableToStore).appendTo($("#someelementofanotherpage")); 
+0

感謝提示,@Francois。你的想法包括所需的html內部的div正確檢索完整的HTML是非常好的。 我只需要編碼html存儲工作。我使用javascrip的「escape()」函數正確存儲,並在讀取它後使用「unes​​cape()」。 –

+0

好的,謝謝! - 添加到代碼示例 – Francois

1

弗朗索瓦解決方案的工作,但克隆()沒有反映JQuery的修改,所以我不得不先運行這個:

$("input").each(function(){ 
    $(this).attr("value", $(this).val()); 
}); 

我總體使用jStorage來存儲表單的狀態。

(我沒有足夠的信譽發表評論,抱歉)

+0

沒有足夠的評論聲望通常不是回答的理由;但在你的情況下,它可以作爲答案。 – Xan