2015-10-16 77 views
0

我想創建一個動態列表,因此當用戶執行搜索時,它將重新填充列表。問題是,我似乎無法使不變的常量來存儲原始的div內容。每次調用函數get的變量都會被重新初始化。功能調用後保持Javascript常量

有沒有辦法實現這一點,而不使用cookie?任何幫助真誠讚賞。代碼不完整,因爲我無法通過這一步,但如果您認爲我完全走向錯誤的方向,請告訴我。

const originalList = document.getElementById('patientList')。getElementsByTagName('li'); frozen = Object.freeze(originalList);

<script> 
    const originalList = document.getElementById('patientList').getElementsByTagName('li'); 
    frozen = Object.freeze(originalList); 
    var newList = ''; 
    var found = false; 
    function filterPatients(){ 
     var searchQuery = document.getElementById('search'); 
     var query = searchQuery.value; 
     var listContainer = document.getElementById('patientList'); 
     var patientList = listContainer.getElementsByTagName('li'); 
     for (var i = 0; i < originalList.length; i++){ 
      var link = patientList[i].getElementsByTagName('a'); 
      var link = link[0].text; 
      /** remove whitespaces for easy comparison **/ 
      link = link.toLowerCase(); 
      query = query.toLowerCase(); 
      link = link.replace(/\s/g, ""); 
      query = query.replace(/\s/g, ""); 

      /** check every character in query **/ 
       if (link.length > query.length && link.substring(0,query.length) == query){ 
        found = true; 
        newList += '<li>' + patientList[i].innerHTML + '</li>'; 
       } 
     } 
     if (found == true){ 
      listContainer.innerHTML = newList; 
      newList = ''; 
     } 
     else{ 
      listContainer.innerHTML = "<li>No patient by that name</li>"; 
     } 
     console.log(frozen); 

    } 

</script> 
+0

您在哪個瀏覽器中運行此代碼? –

+0

@Daniel Granger,我測試了firefox,chrome和safari上的代碼,所有結果都一樣。 –

回答

0
const originalList = document.getElementById('patientList').getElementsByTagName('li').cloneNode(true); 

讓originalList元素的副本。目前,您將originalList和patientList設置爲相同的元素列表,因此更改一個元素也會更改另一個元素。使用element.cloneNode(true)來製作DOM元素的深層副本

+0

謝謝,我會嘗試這個選項並讓你知道。我通過在html中創建重複列表來解決它,並將樣式設置爲隱藏。我知道這兩個選項都不是最優的,但你的確是更好。 –

+0

我想你不能直接調用cloneNode。必須這樣做。 const orignalContainer = document.getElementById('patientList')。cloneNode(true); const originalList = orignalContainer.getElementsByTagName('li'); –