2017-08-11 9 views
0

この関数はw3schoolのW3.jsにあります。このJavaScript関数はHTML文字を検索します

この関数は、検索ボックスに入力することで項目のリストをフィルタリングすることになっています。 何らかの理由で、これにはinnerHTMLのテキストだけでなく、検索のhtmlが含まれます。

など。 <td>を検索すると、すべての行が返されます。要素内でテキストにのみ使用するにはどうすればよいですか?

"use strict"; 
 
var w3 = {}; 
 
w3.getElements = function (id) { 
 
    if (typeof id == "object") { 
 
    return [id]; 
 
    } else { 
 
    return document.querySelectorAll(id); 
 
    } 
 
}; 
 

 
w3.filterHTML = function(id, sel, filter) { 
 
    var a, b, c, i, ii, iii, hit; 
 
    a = w3.getElements(id); 
 
    for (i = 0; i < a.length; i++) { 
 
    b = w3.getElements(sel); 
 
    for (ii = 0; ii < b.length; ii++) { 
 
     hit = 0; 
 
     if (b[ii].innerHTML.toUpperCase().indexOf(filter.toUpperCase()) > -1) { 
 
     hit = 1; 
 
     } 
 
     c = b[ii].getElementsByTagName("*"); 
 
     for (iii = 0; iii < c.length; iii++) { 
 
     if (c[iii].innerHTML.toUpperCase().indexOf(filter.toUpperCase()) > -1) { 
 
      hit = 1; 
 
     } 
 
     } 
 
     if (hit == 1) { 
 
     b[ii].style.display = ""; 
 
     } else { 
 
     b[ii].style.display = "none"; 
 
     } 
 
    } 
 
    } 
 
};
<input oninput="w3.filterHTML('#id01', '.item', this.value)" placeholder="Search for names.."> 
 

 
<table id="id01" border="1"> 
 
    <tr> 
 
    <th>Customer</th> 
 
    <th>City</th> 
 
    <th>Country</th> 
 
    </tr> 
 
    <tr class="item"> 
 
    <td>John Doe</td> 
 
    <td>Berlin</td> 
 
    <td>Germany</td> 
 
    </tr> 
 
    <tr class="item"> 
 
    <td>Berglunds snabbköp</td> 
 
    <td>Luleå</td> 
 
    <td>Sweden</td> 
 
    </tr> 
 
    <tr class="item"> 
 
    <td>Centro comercial Moctezuma</td> 
 
    <td>México D.F.</td> 
 
    <td>Mexico</td> 
 
    </tr> 
 
</table>

+0

あなたはjQueryのを使用して 'は.text()'と '.innerHTML'を交換してみてください。 – Zulfe

答えて

1

innerTextの代わりinnerHTMLこれを回避する簡単な方法です。これはもともとInternet Explorerでのみ使用されていましたが、現在はすべての主要なブラウザとHTML DOM標準の一部になっています。

"use strict"; 
 
var w3 = {}; 
 
w3.getElements = function (id) { 
 
    if (typeof id == "object") { 
 
    return [id]; 
 
    } else { 
 
    return document.querySelectorAll(id); 
 
    } 
 
}; 
 

 
w3.filterHTML = function(id, sel, filter) { 
 
    var a, b, c, i, ii, iii, hit; 
 
    a = w3.getElements(id); 
 
    for (i = 0; i < a.length; i++) { 
 
    b = w3.getElements(sel); 
 
    for (ii = 0; ii < b.length; ii++) { 
 
     hit = 0; 
 
     if (b[ii].innerText.toUpperCase().indexOf(filter.toUpperCase()) > -1) { 
 
     hit = 1; 
 
     } 
 
     c = b[ii].getElementsByTagName("*"); 
 
     for (iii = 0; iii < c.length; iii++) { 
 
     if (c[iii].innerText.toUpperCase().indexOf(filter.toUpperCase()) > -1) { 
 
      hit = 1; 
 
     } 
 
     } 
 
     if (hit == 1) { 
 
     b[ii].style.display = ""; 
 
     } else { 
 
     b[ii].style.display = "none"; 
 
     } 
 
    } 
 
    } 
 
};
<input oninput="w3.filterHTML('#id01', '.item', this.value)" placeholder="Search for names.."> 
 

 
<table id="id01" border="1"> 
 
    <tr> 
 
    <th>Customer</th> 
 
    <th>City</th> 
 
    <th>Country</th> 
 
    </tr> 
 
    <tr class="item"> 
 
    <td>John Doe</td> 
 
    <td>Berlin</td> 
 
    <td>Germany</td> 
 
    </tr> 
 
    <tr class="item"> 
 
    <td>Berglunds snabbköp</td> 
 
    <td>Luleå</td> 
 
    <td>Sweden</td> 
 
    </tr> 
 
    <tr class="item"> 
 
    <td>Centro comercial Moctezuma</td> 
 
    <td>México D.F.</td> 
 
    <td>Mexico</td> 
 
    </tr> 
 
</table>

+0

パーフェクト。ありがとうございました。 –

+0

関連する問題