2016-07-08 6 views
2

フィルタを使用して、2つの異なるデータ属性(一般的なテキストに加えて)に特定の値を含むテーブル行を検索しようとしています。データ属性によるフィルタリング

2つのデータ属性から値を正しく読み取れないようです。値(licDataとstateData)をコンソールに出力すると、 'undefined'が表示されます。もちろん、検索は失敗します。

JS

var $rows = $('.livesearch tr'); 

$('#search').keyup(function() { 
    var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase(); 

    $rows.show().filter(function() { 

    var text = $(this).text().replace(/\s+/g, ' ').toLowerCase(); 
    var licData = $(this).find('td').attr('data-lic'); 
    var stateData = $(this).find('td').attr('data-state'); 

    console.log(text + '-' + licData + '-' + stateData + '<br>'); 

    if (!~stateData.indexOf(val) || !~licData.indexOf(val) || !~text.indexOf(val)) { 
     return true; 
    } else { 
     return false 
    } 

    }).hide(); 
}); 

SAMPLE表の行

<tr> 
    <td>Aaron</td> 
    <td>Ellebrach</td> 
    <td>Clerical</td> 
    <td>444-444-4444</td> 
    <td>Call</td> 
    <td data-lic="special">C</td> 
    <td data-state="state data here">CA</td> 
</tr> 

答えて

1

試してみてください。

var licData = $(this).find('td[data-lic]').attr('data-lic'); 
var stateData = $(this).find('td[data-state]').attr('data-state'); 

あなたのコード:

$(this).find('td').attr('data-lic') 

は実際にあなたに明らかに定義されていない最初のTDの属性を与えるが、あなたが$(this).find('td[data-lic]')を行う際に、このデータが存在属性を持つあなたは、実際に任意のTDを探しているので、あなたのような値を得る: -

var licData = $('tr').find('td[data-lic]').attr('data-lic'); 
 
var stateData = $('tr').find('td[data-state]').attr('data-state'); 
 
console.log('licData: ' + licData); 
 
console.log('stateData: ' + stateData);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>Aaron</td> 
 
    <td>Ellebrach</td> 
 
    <td>Clerical</td> 
 
    <td>444-444-4444</td> 
 
    <td>Call</td> 
 
    <td data-lic="special">C</td> 
 
    <td data-state="state data here">CA</td> 
 
    </tr> 
 
</table>
これらの値を取得するために働いていた

+0

ありがとうplalash、。何らかの理由で、これらの2つの項目でindexOf(val)をテストしようとするとエラーが発生します。 'text'変数をテストするとうまく動作しますが、stateDataとlicDataの両方が返されます:TypeError:undefinedがオブジェクトではありません( 'licData.indexOf'を評価しています) – Doug

+0

ここで何が問題なのかよくわかりません。 [jsFiddle](http://jsfiddle.net/)の問題を示す機能的な例を投稿してください。それは本当にあなたのコードの問題を理解するのに役立ちます。また、可能であれば、新しい質問として投稿し、他のユーザーもそれを見て解決策を提供することができます。 –

+0

jsFiddleのセットアップはこちら:https://jsfiddle.net/dmacy/148zdhm7/。 licDataとstateDataがIF句から削除された場合、それは動作し、コンソールにはデータを取得するvarsが表示されます。しかし、これらの2つのvarsでindexOfを使用すると問題があるようです。 thx – Doug

関連する問題