2017-12-13 17 views
-2

現在、最初の列のテーブルを検索して行ごとに並べ替えるJQueryコードがあります。ただし、検索から除外したい追加のメモ情報が含まれているため、検索はシステム名情報にのみ制限されます。テーブル検索へのJQueryの変更

SearchFilter.customfilter = function(searchInput, table) { 
    var input, filter, table, tr, td, i; 
    input = document.getElementById(searchInput); 
    filter = input.value.toUpperCase(); 
    table = document.getElementById(table); 
    tr = table.getElementsByTagName("tr"); 
    // Loop through all table rows, and hide those who don't match the search query 
    for (i = 0; i < tr.length; i++) { 
    td = tr[i].getElementsByTagName("td")[0]; 
    if (td) { 
     if (td.innerText.toUpperCase().indexOf(filter) > -1) { 
     tr[i].style.display = ""; 
     } else { 
     tr[i].style.display = "none"; 
     } 
    } 
    } 
} 

これが検索されているHTMLテーブルのサンプル行です:

 <tr> 
     <td><a href="site.html">System Name</a> 
      <p class="tablenote"><small>Note: System note information. </small></p> 
     </td> 
     <td>N/A</td> 
     <td>N/A</td> 
     </tr> 

はそのtablenoteクラスを除くなどの検索からtablenote情報を除外するためにjqueryのコードを変更するための良い方法はあります小さなテキストを除外するか?

+2

だから....アンカータグだけの内容を見てください。あなたは「特定の子要素の中にあるものを除いてすべてのinnertextを得る」と言うことはできません。その結果を得るには、代わりにすべての子ノードを反復し、不要なものを除外し、残りの部分を検索する必要があります。各セルについて。各行について。 –

+0

アンカータグの内容はどうすれば確認できますか?あなたはいくつかの特定のコードを提案できますか? –

+0

番号。それはちょうどドムトラバーサルです。 –

答えて

-1

あなたはクラス.tablenoteを持つ任意の要素の内側にある結果をフィルタリングする(:containsセレクタと一緒に)jQueryの.filter()使用することができます。

var inputText = "Joel"; 

var $matches = $('.row').find(':contains(' + inputText + ')').filter(function(){ 
    // only include matches that are *not* inside an .info element 
    return $(this).closest('.tablenote').length == 0; 
}); 

var rowContainsInput = ($matches.length > 0); 

だから、基本的にこの行が入力されたテキストが含まれている場合を教えてください」と言っていますが、それは.tablenote要素内かどう

は私JSFiddle hereが表示されない

:キーコードのようなものは次のようになり。

注:最初にマークアップを制御している場合は、システム名アンカー(<a href="..." class="system-name">System Name</a>など)にクラスを追加してから、具体的にはをターゲットにする方がよいでしょう。。それとも、システム名のアンカーに<a href="..." data-system-name>System Name</a>のようなデータ属性を設定してから、$row.find('[data-system-name]')のようにターゲットを設定する方が良いでしょう。

関連する問題