2

Ich habe ein gut funktionierendes Vollkalenderskript. Ich habe einige Filter für sie, die im Grunde die folgende Form haben:Wenn eine Bedingung, die Werte enthält, die eine Zeichenfolge enthalten/entsprechen,

$("input[name='event_filter_select']:checked").each(function() { 
    // I specified data-type attribute in HTML checkboxes to differentiate 
    // between risks and tags. 
    // Saving each type separately 
    if ($(this).data('type') == 'risk') { 
     risks.push($(this).val()); 
    } else if ($(this).data('type') == 'tag') { 
     tagss.push($(this).val()); 
    } 
}); 

jedoch die else if Anweisung sollte prüfen, ob der geprüfte Wert ‚Tag‘ in der Ergebnismenge enthalten ist, nicht der einzige Wert der Ergebnismenge (wie impliziert durch die ==).

Jetzt kann ich nur Ergebnisse filtern, die nur den markierten Tag-Wert haben. Aber ich möchte diejenigen filtern, die den Tag-Wert unter vielen anderen haben.

Ich denke, dass dies mit match(/'tag'/) getan werden soll, aber ich kann nicht für das Leben von mir herausfinden, wie man das in eine if-Aussage steckt.

Wäre wirklich froh, wenn mich jemand in die richtige Richtung führen könnte.

+0

Können Sie beschreiben, die Ausgabe, die Sie ein wenig mehr wollen - es ist schwer zu verstehen, was Sie erreichen wollen hier –

+0

"um diejenigen zu filtern, die den Tag-Wert unter vielen anderen haben" - verwende getrennte "if" -Anweisungen – RomanPerekhrest

Antwort

1

Ich würde einfach tun:

... 
if ($(this).data('type') == 'risk') { 
    risks.push($(this).val()); 
} else if ($(this).data('type').test(/^tag/) { 
    tagss.push($(this).val()); 
} 
... 

Dies funktioniert, wenn der ‚Tag‘ am Anfang der Zeichenfolge sein muss.
Wenn das "Tag" überall in der Zeichenfolge enthalten sein kann, können Sie test(/tag/) verwenden.

0

Versuchen Sie mit dieser Bedingung.

/\btag\b/.test($(this).data('type')) 
0

Wenn Ihre Daten ein String, Beispiel: tag filter1 filter2 filter3, könnten Sie die indexOf -Funktion verwenden (manual)

Code:

if ($(this).data('type').indexOf("risk") != -1)) 
    //Action here. 

indexOf kehrt -1, wenn der Text nicht gefunden.

0

können Sie verwenden:

var re = new RegExp('\\b' + word + '\\b', 'i'); 

oder wenn Sie möchten, das Wort haben hart codiert in (zum Beispiel in der beispielsweise das Wort Test):

var re = /\btest\b/i 

Beispiel zeigt, die Spiele unter:

var input = document.querySelector('input'); 
 
var div = document.querySelector('div'); 
 
var re; 
 
var match; 
 

 
input.addEventListener('keyup', function() { 
 
    match = input.value.trim(); 
 
    re = new RegExp('\\b' + match + '\\b', 'i'); 
 
    
 
    if($('div').data('type').match(re)) 
 
    div.innerHTML = 'Matched the word: ' + '<strong>' + match + '</strong>'; 
 
    else div.innerHTML = 'Did not match the word: ' + '<strong>' + match + '</strong>'; 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
Word to match:<input></input><br> 
 
Output: 
 
<div data-type='tag tags test'></div>

Mit dem obigen Ausdruck regelmäßig in den Code eingebaut, sollte es in etwa so aussehen:

else if ($(this).data('type').match(/\btag\b/i) { //true for data-type that has `tag` in it. 
    tagss.push($(this).val()); 
}