J'ai créé un filtre de recherche pour rechercher dans mes articles, mais je n'ai pas un mais 5 filtres. Mais quand je filtre la date, tout va bien, mais quand je filtre le nom et la date, je n'obtiens que le résultat sur la date et non sur le nom et la date.

    $( "input[name='name']" ).on("change paste keyup", function() {

    var value = $(this).val();

    if(value.length > 0) {
        getEventsByName('name',$(this).val());          
    }else{
        $("#block-a-events").empty();
        getEvents();
    }


});

$( "input[name='date']" ).on("change paste keyup", function() {

    var value = $(this).val();
    var newDate = myDateFormatter(value);

    if(value.length > 0) {
        getEventsByName('date',newDate);            
    }else{
        $("#block-a-events").empty();
        getEvents();
    }


});

$( "#city" ).on("change", function() {

    var value = $(this).val();

    if(value.length > 0) {
        getEventsByName('location',value);          
    }else{
        $("#block-a-events").empty();
        getEvents();
    }


});

$( "#age" ).on("change", function() {

    var value = $(this).val();

    if(value.length > 0) {
        getEventsByName('age',value);           
    }else{
        $("#block-a-events").empty();
        getEvents();
    }


});

$( "input[name='genre']" ).on("change paste keyup", function() {

    var value = $(this).val();

    if(value.length > 0) {
        getEventsByName('genres',value);            
    }else{
        $("#block-a-events").empty();
        getEvents();
    }


});

Ci-dessus, vous avez les options de filtre et ci-dessous vous voyez comment je filtre dans mon objet

function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
    if (!obj.hasOwnProperty(i)) continue;
    if (typeof obj[i] === 'object') {
        objects = objects.concat(getObjects(obj[i], key, val));
    } else if (i.includes(key) && obj[key].includes(val)) {
        objects.push(obj);
    }
}
return objects;
}

C'est la manipulation, ci-dessous vous voyez ce qu'il fait si tout va bien.

    function getEventsByName(key, value)
{
    $.ajax({
        dataType: 'json',
        url: '{url}',
        success : function(data)
        {
            var events = JSON.stringify(data);
            var filter = getObjects(data, key, value);

            $("#block-a-events").empty();

            $.each($.uniqueSort(filter), function(i, item) {

                content += '{html}';
                $("#block-a-events").append(content);

            })
        }
    })      
}

Merci beaucoup!

0
Pieter Dijkstra 8 sept. 2017 à 16:58

2 réponses

Pour ce faire, il vous suffit de fournir une zone de texte qui prend un terme de recherche. Sur le serveur, vous vérifiez ensuite de quel filtre il s'agit et ils recherchent un renvoi des données pertinentes à l'aide d'une requête.

Donc, par exemple, j'ai une zone de texte qui dit recherche. J'entre un nom ou une ville ou un lieu ou une chose dedans. Il renvoie ensuite sur le serveur, il y a par exemple une requête linq qui voit s'il y a une correspondance pour cette entité qui correspond au terme de recherche. Par exemple, l'entité clients a-t-elle un enregistrement qui correspond au nom ou à la ville ou au lieu ou à l'objet, si c'est le cas, envoyez-le.

1
user6685907user6685907 8 sept. 2017 à 14:52

En supposant que vos données sont un json valide, JMESPATH vous aidera peut-être à filtrer correctement vos données.

C'est un langage de requête json.

Par exemple: vous pouvez filtrer le JSON suivant par âge> 20 ans avec:

people[?age > `20`].{name: name, age: age}

{
  "people": [
    {
      "age": 20,
      "other": "foo",
      "name": "Bob"
    },
    {
      "age": 25,
      "other": "bar",
      "name": "Fred"
    },
    {
      "age": 30,
      "other": "baz",
      "name": "George"
    }
  ]
}

Le résultat ressemblera à:

[
  {
    "name": "Fred",
    "age": 25
  },
  {
    "name": "George",
    "age": 30
  }
]

Vous pouvez utiliser jmes très facilement en intégrant jmespath.js à votre HTML via une balise de script et puis appliquer le filtre:

let searchResult = jmespath.search([JSON], [your filter]);

Pour plus d'informations, consultez simplement les exemples. Il existe également des filtres par date expliqués.

2
scipper 8 sept. 2017 à 14:13