2015-10-16 81 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'); –