javascript
  • jquery
  • html
  • css
  • local-storage
  • 2016-11-26 129 views 0 likes 
    0

    An answerthis question可以將特定對象的切換類保存到本地存儲,這很有幫助,但不完全是我所需要的。當沒有很多解釋性評論時,我並不擅長修改代碼。如何保存對本地存儲所做的任何更改?

    這是回答者的JS:

    if (typeof(localStorage) == 'undefined') { 
        document.getElementById("result").innerHTML = 
        'Your browser does not support HTML5 localStorage. Try upgrading.'; 
    } else { 
    $(".item").each(function(i, el) { 
        if (localStorage['fav' + i] == 'favorites') { 
        $(this).addClass('favorites'); 
        } 
    }); 
    } 
    $(document).ready(function() { 
        $('.btn').on('click', function() { 
        var $item = $(this).closest('.item'); 
        var index = $('.item').index($item); 
        //$(".item").removeClass('favorites'); 
        //localStorage.removeItem('background'); 
        $item.toggleClass('favorites'); 
        if ($item.hasClass('favorites')) { 
         console.log(index) 
         localStorage.setItem('fav' + index, 'favorites'); 
        } else { 
         localStorage.removeItem('fav' + index); 
        } 
        }); 
    }); 
    

    但我希望有一種方法可以有一個按鈕,以保存已對網頁進行任何更改。我正在製作一個非常具有互動性的頁面,並且具有可以理解的元素,可擴展菜單和高亮段落。我希望有一個保存按鈕可保存編輯後的文本,哪些菜單處於打開狀態,哪些段落將突出顯示。

    有沒有辦法做到這一點,而不必編輯每個互動元素的jQuery?

    +0

    我在幫助完成該正則表達式問題後點擊了您的個人資料,並認爲我也可以幫助您解決這個問題。如果沒有真正看到網頁的外觀和修改方式,很難回答這個問題。是否有一個特別的原因,您沒有使用像REST API這樣的服務器端服務來將數據保存到數據庫?是否需要本地存儲? –

    +0

    嗯,最重要的是我正在爲一個最終將鏈接到服務器的網站(專業服務將爲我做,我不知道任何服務器端代碼)的原型。爲了演示的目的,我希望我可以有一個按鈕,可以讓我向人們展示「保存你的位置」功能是如何工作的。如果太困難了,我可能只需要等到我可以在服務器端完成它。 – Cleo

    +0

    @Cleo通過任何更改,你的意思是你的JS變量?或者是其他東西?因爲如果是JS變量,解決方案很容易做到並理解... –

    回答

    0

    聽起來像你只是想一種方法來保存整個頁面狀態到本地存儲。

    如果我打算這樣做,我可能會爲每個需要狀態的元素創建一個不同的本地存儲項目,以便將事物組織得非常清晰。

    所以,你需要一種方法來你的狀態轉換到本地存儲字符串後

    解析它放回把狀態保持在這樣一個對象的狀態可以工作

    state = { 
        'menu1': 'open', 
        'menu2': 'closed', 
        'textinput1': {'text': '' /*put text here*/, 'highlighted': '57-159'} //characters 57-159 are highlighted 
    } 
    //or if you want things to be as simple as possible 
    state = { 
        'menu1': 'open', 
        'menu2': 'closed', 
        'textinput1-text': '' /*put text here*/, 
        'textinput1-highlighted: '57-159'} 
    } 
    //and then reading through the state 
    for (item in state) { 
        if (state.hasOwnProperty(item)) { 
         //convert the state into a single string for each item 
         //then set the local storage item 
         localStorage.setItem(item,stringstate) 
        } 
    } 
    

    只是要小心但如果你用'textinput1'(它實際上擁有它自己的一個對象)做了我上面所做的。你可能會想給每個這些內部項目的這樣自己的本地存儲物品:

    'textarea1-text' and 'textarea1-highlighted' 
    

    如果你不喜歡這個單一的工作狀態已經可能難以返工你的代碼要做到這一點,但它會更容易對新事物,如果你持有所有這些事情

    或者,如果你在你的網頁多個組件,你可以有一個狀態爲每個組件

    轉換本地存儲到本地存儲項目返回狀態:

    for (item in state) { 
        if (state.hasOwnProperty(item){ 
         state.item = localStorage.getItem(item) 
        } 
    

    然後,無論何時您想將狀態保存到本地存儲,都很容易,因爲您已擁有所有狀態 您可以在任何時候對網頁上的任何內容進行任何更改,或者狀態只有當用戶試圖保存它時,你可以立即全部更新所有按鈕被點擊後立即全部更新,然後立即保存到本地存儲

    我希望這有助於一些,對不起,如果這不是你正在尋找的方法

    編輯:

    對不起,這個想法的狀態非常混亂,我可能在解釋我的意思方面做得很差。因此,您希望有一個按鈕保存通過將其保存到本地存儲器所做的任何更改。你從另一個人的答案中得到的切換想法可以用於諸如菜單打開或關閉之類的事情,因爲它只能處於「開」或「關」的位置,但是如果你想保存文本和文本是突出顯示,那麼你當然需要保存更多的信息。

    你說你有所有這些元素,如菜單和文本元素。你可以有一個單一的對象(無論你想要什麼名稱)。現在我們稱之爲狀態。

    所以

    var state = {} 
    

    對象是一個單一的地方,你可以將所有不同狀態的各種元素。如果菜單很容易打開或關閉,您可以擁有一個狀態。

    如果打開菜單的jQuery事件打開(或者您有該事件觸發),則關閉,只需讓它保存發生在狀態對象上的任何事件即可。 下面是一個粗略的例子來展示這個概念。假設您有一些類似菜單的菜單,並使用jquery show()hide()函數將其切換爲打開和關閉。

    var state = { 
        menu1: false 
    } 
    
    //A function you call whenever the menu button is clicked 
    function menuToggle() { 
        if (state.menu1) { 
         $('#menu1').hide() 
        } else { 
         $('#menu1').show() 
        } 
        //now update the state change 
        state.menu1 = !state.menu1 
    } 
    

    現在讓我們假設你有一些函數被調用時,你想要將更改保存到本地存儲

    saveToLocalStorage() { 
        for (item in state) { 
         if (state.hasOwnProperty(item)) { 
          //make sure only to save the state[item] if it is a string or can doesn't lose meaning if converted to a string 
          localStorage.setItem(item, state[item]) 
         } 
        } 
    } 
    

    該代碼將通過國家每個項目運行,並將其保存到本地存儲

    在加載頁面,您可以查看本地存儲

    loadFromLocalStorage() { 
        var storedItem 
        //loop through all of the properties in state 
        for (item in state) { 
         if (state.hasOwnProperty(item)) { 
          storedItem = localStorage.getItem(item) 
          if (storedItem !== null) { 
           //the state now holds whatever was in local storage 
           state[item] = storedItem 
          } 
         } 
        } 
    } 
    

    Sorr如果我沒有將事情簡單化,那麼再一次。你問的問題要求你有一些方法來檢查你想保存到本地存儲的所有東西,所以如果你把所有這些信息都放在一個對象中,那麼很容易把它全部保存,因爲它已經在一個地方。

    +0

    謝謝你的回答!不幸的是,我並不真正瞭解如何將其納入我的代碼。就像你說的那樣,我不是在用'單一國家'。我對jQuery很陌生,幾乎完全不瞭解JS,所以即使閱讀了這3次,我仍然沒有得到它。如果我通過一個快速的在線課程,這是一個基本的JS理論嗎?或者這是更具體的東西?也許你可以指向我的演示某處寫這樣的代碼嗎? – Cleo

    +0

    對不起,這是如此令人困惑,我可以理解它會是怎樣,當我知道它的時候,它是爲了我。它實際上是JavaScript庫[react](https://facebook.github.io/react/)中使用的東西,這是我第一次瞭解到一個國家的想法。但是,即使只是簡單的JS,編寫代碼也是一種有用的方法。我會試着再補充一點,以解釋我在答案底部的含義 – Dal

    相關問題