javascript datatable - Comment puis-je filtrer les colonnes de table en utilisant la logique OU comme apposée à ET




filter select (2)

En utilisant votre violon comme modèle, je l'ai mis à jour pour fournir la fonctionnalité que je crois que vous voulez.

J'étend le filtrage dataTables à chaque clic d'une case à cocher:

$.fn.dataTableExt.afnFiltering.push(
    function (settings, data, index) {
        var s = [0, 3, 5]; // columns to filter
        for (var i=0; i < s.length; i++) {
            if (data[s[i]] != 0) return true;
        }
        return false;
    }
);

Entièrement intégré dans le violon: lien

Exemple de violon

J'ai une table html:

_A_B_C_D_
|0|1|0|1|
|0|1|0|0|
|1|0|0|1|

Je veux filtrer les colonnes non nulles . En utilisant jQuery dataTables (pas une exigence stricte, juste ce que j'utilise actuellement) j'exécute le filtre suivant:

// value is the column index, true simply informs the filter method to use regex
dataTable.fnFilter("[^0]", value, true); 

Toutefois, le filtrage de plusieurs colonnes crée un filtre AND . Ainsi:

dataTable.fnFilter("[^0]", 0 /*A*/, true); 
dataTable.fnFilter("[^0]", 3 /*D*/, true); 

créerait le suivant

_A_B_C_D_
|1|0|0|1|

J'ai besoin d'un comportement OU bien que ce qui créerait le tableau suivant:

_A_B_C_D_
|0|1|0|1|
|1|0|0|1|

Où la colonne A est non nulle OU la colonne D est différente de zéro. Je ne peux pas penser à un moyen de mettre en œuvre cela avec ma structure actuelle.

Comment puis-je filtrer les colonnes de table en utilisant la logique OU comme apposée à ET?


Voici juste une autre solution pour télécharger un fichier ( sans plugin )

Utilisation de javascripts simples et AJAX (avec barre de progression)

Partie HTML

<form id="upload_form" enctype="multipart/form-data" method="post">
    <input type="file" name="file1" id="file1"><br>
    <input type="button" value="Upload File" onclick="uploadFile()">
    <progress id="progressBar" value="0" max="100" style="width:300px;"></progress>
    <h3 id="status"></h3>
    <p id="loaded_n_total"></p>
</form>

Partie JS

function _(el){
    return document.getElementById(el);
}
function uploadFile(){
    var file = _("file1").files[0];
    // alert(file.name+" | "+file.size+" | "+file.type);
    var formdata = new FormData();
    formdata.append("file1", file);
    var ajax = new XMLHttpRequest();
    ajax.upload.addEventListener("progress", progressHandler, false);
    ajax.addEventListener("load", completeHandler, false);
    ajax.addEventListener("error", errorHandler, false);
    ajax.addEventListener("abort", abortHandler, false);
    ajax.open("POST", "file_upload_parser.php");
    ajax.send(formdata);
}
function progressHandler(event){
    _("loaded_n_total").innerHTML = "Uploaded "+event.loaded+" bytes of "+event.total;
    var percent = (event.loaded / event.total) * 100;
    _("progressBar").value = Math.round(percent);
    _("status").innerHTML = Math.round(percent)+"% uploaded... please wait";
}
function completeHandler(event){
    _("status").innerHTML = event.target.responseText;
    _("progressBar").value = 0;
}
function errorHandler(event){
    _("status").innerHTML = "Upload Failed";
}
function abortHandler(event){
    _("status").innerHTML = "Upload Aborted";
}

Partie PHP

<?php
$fileName = $_FILES["file1"]["name"]; // The file name
$fileTmpLoc = $_FILES["file1"]["tmp_name"]; // File in the PHP tmp folder
$fileType = $_FILES["file1"]["type"]; // The type of file it is
$fileSize = $_FILES["file1"]["size"]; // File size in bytes
$fileErrorMsg = $_FILES["file1"]["error"]; // 0 for false... and 1 for true
if (!$fileTmpLoc) { // if file not chosen
    echo "ERROR: Please browse for a file before clicking the upload button.";
    exit();
}
if(move_uploaded_file($fileTmpLoc, "test_uploads/$fileName")){ // assuming the directory name 'test_uploads'
    echo "$fileName upload is complete";
} else {
    echo "move_uploaded_file function failed";
}
?>

Voici l'application EXEMPLE





javascript jquery datatables filtering