2016-06-22 11 views
-2

Ich versuche, ein Jquery-Selektor-Generator für meine zwei Filter zu machen - das Ziel ist Hidding nur einige Elemente in einem Kalender -Merge jquery Selektor [JavaScript-String concat]

Wenn ich auf die Gruppe filtern DB_ID 2 und auf der personn DB_ID 1 I möchte folgenden Selektor erzeugen: #mod_calendar .gid_2.pid_1

Wenn ich auf dem Gruppenfilter DB_ID 2 I möchte folgenden Selektor erzeugen: #mod_calendar .gid_2

Wenn ich auf dem personn DB_ID filtern 1 Ich möchte den folgenden Selektor erzeugen: #mod_calendar .pid_1

Wenn ich auf die Gruppe DB_ID 2,5,6,8 und auf der personn DB_ID 1 Filter würde Ich mag die folgende Selektor erzeugen: #mod_calendar .gid_2.pid_1,#mod_calendar .gid_5.pid_1,#mod_calendar .gid_6.pid_1,#mod_calendar .gid_8.pid_1

Wenn ich auf dem Gruppenfilter DB_ID 2,5 , 6,8 und auf dem personn DB_ID 1,2 ich möchte folgende Selektor erzeugen: #mod_calendar .gid_2.pid_1,#mod_calendar .gid_5.pid_1,#mod_calendar .gid_6.pid_1,#mod_calendar .gid_8.pid_1#mod_calendar .gid_2.pid_2,#mod_calendar .gid_5.pid_2,#mod_calendar .gid_6.pid_2,#mod_calendar .gid_8.pid_2

und so ein, ich glaube, Sie erhalten den Punkt ... diese https://jsfiddle.net/5mr60f6p/1 ist, was ich bisher versucht, aber Ich bin im Moment irgendwie festgefahren.

[EDIT]

<div id="mod_calendar"> 
<div class="pid_1 gid_1">pid_1 gid_1 [do not match gid_filter should not be shown]</div> 
<div class="pid_2 gid_2">pid_2 gid_2 [do not match pid_filter should not be shown]</div> 
<div class="pid_5">pid_5 [do not match gid_filter should not be shown]</div> 
<div class="pid_5 gid_2">pid_5 gid_2 [match gid_filter and pid_filter should be shown]</div> 
</div> 

JS-Code:

var pid_filter= [5,32,56,8,4]; 
var gid_filter=[2,5]; 
function generate_filter_selector(prefix,values){ 
    return prefix+values.join(','+prefix); 
} 
console.log($(generate_filter_selector('#mod_calendar .pid_',test)).show()); 
//I would like the intersection of both selector and not like I did one after the other. 
console.log($(generate_filter_selector('#mod_calendar .gid_',test2)).show()); 

Was ist mit diesem genauen exemple und diesen beiden Arrays Ich mag würde dies erhalten:

$("#mod_calendar pid_5.gid_2,#mod_calendar pid_32.gid_2,#mod_calendar pid_56.gid_2,#mod_calendar pid_8.gid_2,#mod_calendar pid_4.gid_2,#mod_calendar pid_5.gid_5,#mod_calendar pid_32.gid_5,#mod_calendar pid_56.gid_5,#mod_calendar pid_8.gid_5,#mod_calendar pid_4.gid_5").show(); 

Wie ich im Kommentar gesagt habe, würde ich gerne die Schnittmenge von b haben andere Filter.

+0

I Ich habe keine Ahnung, was du fragst oder was das Problem ist. Der Fiddler hat eine Codezeile, die zwei Strings verkettet und Sie wollen, dass wir was tun? Können Sie die Frage ein wenig klarer stellen und mehr Code und das spezifische Problem zeigen, das Sie haben? – Esko

+0

@Esko Ich habe meinen Beitrag bearbeitet – Su4p

Antwort

0

oder noch schneller:

function generate_jquery_selector_from_fitlers(filters,prefix,item_prefix){ 
     prefix = prefix || ''; 
     item_prefix = item_prefix || '.'; 
     return prefix+item_prefix+allPossibleCases(filters).join(' ,'+prefix+item_prefix); 
     function allPossibleCases(arr) { 
      if (arr.length == 1) { 
       return arr[0]; 
      } 
      else { 
       var result = []; 
       var allCasesOfRest = allPossibleCases(arr.slice(1)); 
       for (var i = 0; i < allCasesOfRest.length; i++) { 
        for (var j = 0; j < arr[0].length; j++) { 
         result.push(arr[0][j] +'.'+ allCasesOfRest[i]); 
        } 
       } 
       return result; 
      } 
     } 

    }; 

jsfiddle: https://jsfiddle.net/prazj7qp/

0

Für diejenigen, die mein Problem verstanden, das ist meine Lösung:

function generate_jquery_selector_from_fitlers(filters){ 
    var number_of_values = 1; 
    $.each(filters, function(index, selectors) { 
    number_of_values = number_of_values*selectors.length; 
    return number_of_values; 
    }); 
    filters_length = $.map(filters, function(selectors, i) { 
    return selectors.length; 
    }); 
    var string_selector= ''; 
    for(var i =0; i < number_of_values;i++){ 
    var current = i; 
    $.each(filters, function(index, selectors) { 
     var ind = parseInt(current % filters_length[index]); 
     var ligne = selectors[ ind ]; 
     current = parseInt(current/filters_length[index]); 
     string_selector += '.' + ligne; 
    }); 
    string_selector += ','; 
    } 
    return string_selector.substring(0, string_selector.length - 1); 
} 

Hier ist die jsfiddle https://jsfiddle.net/skncsvw0/