2017-09-20 12 views
0

データベースから取得したデータを含むjqueryデータ型があります。デフォルトでは、フィルタリングはなく、そのユーザに必要なすべてのデータを持っています。入力フィールドには、jqueryデータ型自身の検索に加えてカスタム検索があります。チェックボックスをオンにすると、データが要素data-attributeに基づいて除外されるチェックボックスアクションを実装したいと思います。データ属性に基づいてjqueryデータ型からデータをフィルタリングします

これはチェックボックスである:のDataTableの

<div class='checkbox' id='subplayers'> 
    <label><input type='checkbox' value=''>Show filtered content</label> 
</div>" 

最初の列は属性data-insub=xx is 1 || x is 0<td data-insub='1'>又は<td data-insub='0'>)と<td>要素です。スクリプトで

私は、チェックボックスの変更を検出:

$('#subplayers').change(function() { 
    if($(this).is(":checked")) { 
     //Checked 
     var playersInSub = document.querySelectorAll("[data-insub='1']"); 
    } 
    else{ 
     //Not checked 
    }  
}); 

今私は(1としてそれを持っているものを保つ)0としてデータ属性data-insubセットを持っているすべてのプレーヤーをフィルタリングしたいと思います。私は単純な検索は、データ属性ではなく表に書き込まれたデータに対して機能するので、ここでは十分ではないと思います。

これはテーブル行のデータを生成しているPHPです(私のコードの有益な部分の多くは、私が持っている問題とは関係がないと思われます)。

$pid = $player['pid']; 
$fname = $player['fname']; 
$lname = $player['lname']; 
$club = $player['club']; 
$sameTourney = false; 
if (in_array($pid, $playerIds)){ 
    $sameTourney = true; 
} 
$sameSub = false; 
if (in_array($pid,$subPlayers)){ 
    $sameSub = true; 
} 
echo "<tr id='col+'".$playernumber."_filter'>"; 
    if ($sameSub){ 
     echo "<td class='playernumber' data-insub='1'>".$playernumber."</td>"; 
    } 
    else{ 
     echo "<td class='playernumber' data-insub='0'>".$playernumber."</td>"; 
    } 
    echo "<td class='firstnames'>".$fname."</td>"; 
    echo "<td class='lastnames'>".$lname."</td>"; 
    echo "<td class='clubnames'>".$club."</td>"; 
    if ($sameTourney){ 
     echo "<td><a href='#' class='modifyplayer' id='removeModify".$pid."' data-actiontype='remove' data-playerid='".$pid."'>Remove</a></td>"; 
    } 
    else { 
     echo "<td><a href='#' class='modifyplayer' id='addModify".$pid."' data-actiontype='add' data-playerid='".$pid."'>Add</a></td>"; 
    } 

echo "</tr>"; 
$playernumber += 1; 

答えて

0

あなたは(jQueryの非表示()ショーを使用することができます)

隠す属性データinsub = "1"使用してすべての行:

$("table").find("[data-insub='1']").hide(); 

ショー属性がすべての行data-insub = "1"使用:

$("table").find("[data-insub='1']").show(); 
+0

これは、すべての表要素が表示され、表項目が別々の表ページにない場合に機能します(たとえば、表に25の要素があり、ページあたり10の要素が表示されている場合、 10,10および5要素)。要素は最初のページからのみ非表示になります。 – Banana

+0

なぜサーバー側をフィルタリングしたり、jsonオブジェクトをクライアントに送り返して人生を楽にするのはなぜですか? –

0

私はデータ属性でそれを行うための方法を見つけることができなかったように、私は私の行のためのクラスを作った - 私はそれをフィルタリングしたい場合、私はクラスallplayersを追加し、私は滞在することを望んだ場合、私はクラスinsubを追加しました。

$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) { 
     var myRowClasses = oSettings.aoData[iDataIndex].nTr.className.split(" "); 
     if($("#subplayers").is(":checked")) { 
      return myRowClasses.indexOf('insub') > -1; 
     } 
     else{ 
      return myRowClasses.indexOf('allplayers') > -1; 
     } 

    }); 

トリックはクラスinsubを持っている要素は、同様にクラスallplayersを持っている必要があるということです。

関連する問題