2016-08-05 7 views
1

Ich habe Code wie folgt. Ich benutze jtree Search filter.wie zu säen Ergebnis mehrere Wortkombination übereinstimmen in jtree Suchfilter jquery (mehrere Wort & Condition in jtree)


$(document).on("keyup paste", "input#groups-quick-filter", function(){ 
    var tmpStr = $(this).val().replace(/\s\s+/g, ' '); 
    var arrStr = tmpStr.split(' '); 
    var strCnt = ""; 
    for(i = 0; i < countWords(tmpStr); i++){ 
     strCnt = strCnt + arrStr[i] + " "; 
     //groupsDataTable.jstree("search", arrStr[i]); 
     groupsDataTable.jstree(true).search(arrStr[i]); 
    } 
}); 

I jtree Array (Knoten) Wert wie dieser


1   abc 
2   abc xyz 
3   xyz abc 
4   testabcxyz 
5   test xyz 
6   xyz 
7   abc test xyz 
8   xyzabctest 

Eingangswert im Suchfilter: (. Es gibt mir) abc xyz

Result 
1   abc xyz 
2   xyz abc 
3   testabcxyz 
4   test xyz 
5   xyz 
6   abc test xyz 
7   xyzabctest 

Ich will nur Ergebnisse, die %abc% & %xyz% enthalten nicht %abc% or %xyz% mögen. Mein Code gib mir oder Ergebnis welches alle Wörter berücksichtigt.

+0

Wird eine Art von Arbeits Beispiel müssen in der Lage sein, weiter zu unterstützen. Eine Sache, die mir aufgefallen ist, wenn du 'strCnt = strCnt + arrStr [i] +" ";' verwendest, könntest du 'strCnt = arrStr.join (" ") nicht verwenden? – Twisty

+0

Erstellt diese Geige zum Testen: https://jsfiddle.net/Twisty/6s1q4L6f/ – Twisty

+0

immer noch bekomme ich das gleiche Ergebnis wie zuvor definiert .. Ich möchte Wort, die% Test% und% abc% enthalten, so wie pro Ihre Lösung wird es gib mir ("abc") wort auch meine eingabe: test abc ergebnis: abc - (sollte nicht da sein) abc xyz - (sollte nicht -false) xyz abc - (sollte nicht -false) testabcxyz test xyz - (sollte nicht there -true) xyz - (sollte nicht -true) abc test xyz xxyzabctest * false enthalten Wort, das nicht in der Suche result.i wollen (% word1% &&% word2%) Bedingung, in der beide Wörter im Suchergebnis enthalten sein sollten –

Antwort

1

Im search Plugin gibt es eine append Flagge:

append (Boolean), wenn die Ergebnisse dieser Suche auf true gesetzt werden, um zur vorherigen Suche beigefügten

See: https://www.jstree.com/api/#/?f=search(str%20[,%20skip_async])

Damit habe ich Ihren ursprünglichen Code angepasst. Grundsätzlich werden wir in den Daten nach jedem durch Leerzeichen getrennten Begriff suchen.

Arbeitsbeispiel: https://jsfiddle.net/Twisty/6s1q4L6f/5/

HTML

Filter: 
<input type="text" id="groups-quick-filter"> 
<span class="clear-button">X</span> 
<div id="jstree"> 
    <ul> 
    <li>abc</li> 
    <li>abc xyz</li> 
    <li>xyz abc</li> 
    <li>testabcxyz</li> 
    <li>test xyz</li> 
    <li>xyz</li> 
    <li>abc test xyz</li> 
    <li>xyzabctest</li> 
    </ul> 
</div> 

CSS

.clear-button { 
    font-family: "Arial", sans-serif; 
    margin-left: -22px; 
    display: none; 
    cursor: pointer; 
} 

jQuery

$(function() { 
    $("#jstree").jstree({ 
    "plugins": [ 
     "search" 
    ], 
    }); 
    $(".clear-button").click(function() { 
    $("#groups-quick-filter").val(""); 
    $("#jstree").jstree(true).clear_search(); 
    $(this).hide(); 
    }) 
    $("#groups-quick-filter").keyup(function() { 
    $(".clear-button").show(); 
    var term = $(this).val(); 
    if (term.length && term.indexOf(' ')) { 
     var arrStr = term.split(' '); 
     $.each(arrStr, function(k, v) { 
     $("#jstree").jstree(true).search(v, true, false, false, true); 
     }); 
    } else { 
     $("#jstree").jstree(true).search(term); 
    } 
    }); 
}); 

wird am Beispiel Such gezeigt Dies basiert hier: https://www.jstree.com/plugins/

+0

immer noch das gleiche Ergebnis wie zuvor definiert werden. Ich möchte das Wort mit% test% und% abc% angeben, so wie es Ihre Lösung geben wird me ("abc") Wort auch meine Eingabe: test abc Ergebnis: –

+0

i noch gleiche Ergebnis wie zuvor definiert ist .. ich will Wort, auf die% test% enthalten und% abc% so wie pro Ihre Lösung wird es gib mir ("abc") Wort auch meine Eingabe: test abc Ergebnis: abc - (sollte nicht dort) abc xyz - (sollte nicht da -false) xyz abc - (sollte nicht dort -false) testabcxyz Test xyz - (sollte nicht dort -true) xyz - (sollte nicht dort -true) abc Test xyz xyzabctest * falsches Wort enthalten, sollten nicht auf der Suche result.i Mangel (% word1% &&% word2%) Bedingung, in der beide Wörter im Suchergebnis enthalten sein sollen. –

+0

Wenn Ihre Eingabe "test abc" ist, besteht die verwendete Logik darin, über jedes Wort zu iterieren und nach dem Wort in den Daten zu suchen. Zum Beispiel wird 'test' zuerst gesucht. "testabcxyz, test xyz, abc test xyz, xyzabctest" würde bei diesem ersten Durchgang hervorgehoben werden. Im zweiten Durchlauf behält die Suche die vorherigen Ergebnisse und sucht nun nach 'abc'. Der zweite Durchlauf wird hervorheben: "abc, abc xyz, xyz abc, testabcxyz, abc test xyz, xyzabctest". Dies ist die '% word1% &&% word2 %' Logik. Sind Sie sicher, dass Sie nicht%% word1 word2% logic wollen? – Twisty