2017-08-11 36 views
1

我这里有文本过滤列工作表列0中,但我想的是,所有列将被过滤掉,而不是仅仅列0表行筛选所有列TD在Javascript

这里是我的jsfiddle:

function myFunction() { 
 
    var input, filter, table, tr, td, i; 
 
    input = document.getElementById("myInput"); 
 
    filter = input.value.toUpperCase(); 
 
    table = document.getElementById("myTable"); 
 
    tr = table.getElementsByTagName("tr"); 
 
    for (i = 0; i < tr.length; i++) { 
 

 
    td = tr[i].getElementsByTagName("td")[0]; 
 
    if (td) { 
 
     if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { 
 
     tr[i].style.display = ""; 
 
     } else { 
 
     tr[i].style.display = "none"; 
 
     } 
 
    }  
 
    } 
 
}
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name"> 
 

 
<table id="myTable" border="1"> 
 
    <tr class="header"> 
 
    <th style="width:60%;">Name</th> 
 
    <th style="width:40%;">Country</th> 
 
    </tr> 
 
    <tr> 
 
    <td>Alfreds Futterkiste</td> 
 
    <td>Germany</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Berglunds snabbkop</td> 
 
    <td>Sweden</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Island Trading</td> 
 
    <td>UK</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Koniglich Essen</td> 
 
    <td>Germany</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Laughing Bacchus Winecellars</td> 
 
    <td>Canada</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Magazzini Alimentari Riuniti</td> 
 
    <td>Italy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>North/South</td> 
 
    <td>UK</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Paris specialites</td> 
 
    <td>France</td> 
 
    </tr> 
 
</table>

另外也一样,我不知道如何实现这一点:“过滤选项应该不会阻止用户界面,您可以使用进度条”

我在这里包含了我所有的示例代码。

回答

0

所有你需要做的是循环通过TDS每一行

function myFunction() { 
    var input, filter, table, tr, td, i, t; 
    input = document.getElementById("myInput"); 
    filter = input.value.toUpperCase(); 
    table = document.getElementById("myTable"); 
    tr = table.getElementsByTagName("tr"); 
    for (i = 0; i < tr.length; i++) { 
    var filtered = false; 
    var tds = tr[i].getElementsByTagName("td"); 
    for(t=0; t<tds.length; t++) { 
     var td = tds[t]; 
     if (td) { 
      if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { 
      filtered = true; 
      } 
     }  
    } 
    if(filtered===true) { 
     tr[i].style.display = ''; 
    } 
    else { 
     tr[i].style.display = 'none'; 
    } 
    } 
} 
+0

它不能正常工作 – mredwine

+0

https://jsfiddle.net/6yq32wo2/这里的链接。我注释掉了工作,并把你的代码,但它不起作用男人 – mredwine

+0

好吧,看到更新之一。我犯了一个错误,使用相同的变量名称。 –

0

您是否在寻找一些这样的功能吗?我只是稍微更新了你的功能。

function myFunction() { 
 
    var input, filter, table, tr, td, i; 
 
    input = document.getElementById("myInput"); 
 
    filter = input.value.toUpperCase(); 
 
    table = document.getElementById("myTable"); 
 
    var rows = table.getElementsByTagName("tr"); 
 
    for (i = 0; i < rows.length; i++) { 
 
    var cells = rows[i].getElementsByTagName("td"); 
 
    var j; 
 
    var rowContainsFilter = false; 
 
    for (j = 0; j < cells.length; j++) { 
 
     if (cells[j]) { 
 
     if (cells[j].innerHTML.toUpperCase().indexOf(filter) > -1) { 
 
      rowContainsFilter = true; 
 
      continue; 
 
     } 
 
     } 
 
    } 
 

 
    if (! rowContainsFilter) { 
 
     rows[i].style.display = "none"; 
 
    } else { 
 
     rows[i].style.display = ""; 
 
    } 
 
    } 
 
}
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name"> 
 

 
<table id="myTable" border="1"> 
 
    <tr class="header"> 
 
    <th style="width:60%;">Name</th> 
 
    <th style="width:40%;">Country</th> 
 
    </tr> 
 
    <tr> 
 
    <td>Alfreds Futterkiste</td> 
 
    <td>Germany</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Berglunds snabbkop</td> 
 
    <td>Sweden</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Island Trading</td> 
 
    <td>UK</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Koniglich Essen</td> 
 
    <td>Germany</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Laughing Bacchus Winecellars</td> 
 
    <td>Canada</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Magazzini Alimentari Riuniti</td> 
 
    <td>Italy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>North/South</td> 
 
    <td>UK</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Paris specialites</td> 
 
    <td>France</td> 
 
    </tr> 
 
</table>

+0

但是,在搜索时,我该如何实现这个” “过滤选项不应该阻止UI,你可以使用进度条。”? – mredwine

+0

我不确定你在问什么。用户在搜索时页面是否呈现?或者你是否说你每次keyup事件被触发时都需要显示一个进度条? – tommyO

+0

准确地说,会有一个装载程序在触发按键时触发。 – mredwine