2016-05-31 8 views
1

Das ist, was ich zu tun habe versucht:JQuery: Toggle Push/Splice innerhalb Array

ich eine Liste von div-Tags mit der gleichen Klasse, jedes Mal wenn ich auf einen der divs klicken Ich möchte die speichern ID des jeweiligen div in einer Reihe, so etwas wie:

var array = []; 

[CODE] 

$("divID").on("click", function(){ 

    array.push($(this).attr("id")); 

[CODE] 

}); 

Was ich erreichen will ist, dass jeder anderer Klick auf dem gleichen div Push/innerhalb des Arrays der passenden ID Spleiß. Ein Push-/Spleiß-Toggle um ID

Das Verschieben der div-IDs innerhalb eines Arrays ist nicht das Problem, aber das Entfernen scheint etwas problematischer zu sein, da ich nur das komplette Array löschen kann.

Wie würde ich das Array durchlaufen müssen, um die passende ID zu finden und es bei Klick umzuschalten?

Danke!

+1

Ein einfacherer Ansatz wäre das Hinzufügen von '{ID: 'on'}' beim Klicken, dann aktualisieren Sie die ID und setzen Sie sie auf 'off', wenn Sie erneut klicken. Auf diese Weise müssen Sie keine Elemente aus dem Array entfernen - aktualisieren Sie einfach ihren Status. –

+0

Vielen Dank für die schnelle Antwort! Dieser Ansatz funktioniert! – derp

Antwort

1

Wie in meinem OP-Kommentar angegeben, wäre ein einfacherer Ansatz die Verwendung eines Hash anstelle eines einfachen Arrays. Dazu können Sie beim Klicken {ID: 'on'} hinzufügen, dann die ID aktualisieren und beim erneuten Klicken auf 'Aus' setzen. Auf diese Weise müssen Sie keine Elemente aus dem Array entfernen - aktualisieren Sie einfach ihren Status.

Zum Beispiel:

var hash = {}; 

$("divID").on("click", function(){ 
    var id = $(this).attr("id"); 

    // Turns it on 
    hash[id] = 'on';    // 'on' or true 

    // Alternatively, turn it off 
    hash[id] = 'off';    // 'off' or false 

    // You can also check its status 
    // if (hash[id] == 'on')... 
}); 
0

UPDATE: die ursprüngliche Ansatz in Bezug auf:

ich die Antwort auf den ursprünglichen Ansatz der Hinzufügen/Entfernen Sie die Werte des Arrays hier (Referenz):

http://www.thoughtdelimited.org/thoughts/post.cfm/jquery-tip-finding-adding-and-removing-values-from-arrays#respond

Und das ist der Code:

var index= jQuery.inArray(theValue, theArray); 

//If you're not using any other Javascript library that utilizes the $ sign, you can use the $ sign 
//instead of the jQuery namespace 

var index= $.inArray(theValue, theArray); 
if(index== -1) 
    { 
    //Value not found in the array. Add to the end of the array with push(); 
    theArray.push(theValue); 
    } 
else 
    { 

    //Remove from the array using splice(). Splice takes the index value of where you want to start 
    //removing items from the array as the first parameter, and then the number of item you want 
    //to remove as the second parameter. 

    theArray.splice(index,1); 

    } 

Arbeitete auch für mich, ich hoffe, es wird anderen helfen.