2016-07-12 7 views
1

Ich füge Objekte zu einem Objekt hinzu und muss sie löschen können.Zugriff auf dynamischen Wert zum Löschen des Objektschlüssels

<div class="list"> 
    <span class="itemName">Item Name</span> 
    <a href="#" class="expand"></a> 

    <ul class="options"> 
      <h5> Options </h5> 
      <li><a href="#" class="add">Add Item</a></li> 
      <li><a href="#" class="delete">Delete Item</a></li> 
    </ul> 
</div> 
var tableData = {}; 

$(".delete").click(function() { 
    var tmp = $(this).parent().parent().parent().next().val(); 
    delete tableData[tmp]; 
)}; 

Ich brauche den „Item Namen“ zu bekommen, weil es der Schlüssel für das Objekt, das ich löschen muß. Bin ich hier richtig?

+0

Worauf bezieht sich das? Ich nehme auch an, dass 'tableData' einige Eigenschaften enthält, die Sie in der Frage weggelassen haben? –

+0

@RoryMcCrossan Ich habe den ursprünglichen Beitrag bearbeitet, leider vergessen zu enthalten! 'tableData' enthält einfach eine Liste von" Item Name "-Objekten, die viele Verschachtelungen haben, die für die Frage irrelevant sind. –

Antwort

2

Erstens können Sie closest() anstelle von mehreren verketteten parent() Anrufe verwenden. Zweitens sucht next() nach Geschwistern, aber Sie müssen .itemName finden, die ein Kind ist, so dass Sie find() verwenden müssen. Schließlich haben nur Formulareingaben einen Wert, der über val() abgerufen werden kann. In diesem Fall benötigen Sie text() oder html(). Versuchen Sie dies:

$(".delete").click(function() { 
    var tmp = $(this).closest('.list').find('.itemName').text(); 
    delete tableData[tmp]; 
}); 

Beachten Sie auch, dass Ihre schließende Klammer war falsch herum. Es sollte }) sein, nicht )}.

Working example

+0

In der' console.log' sollte die 'bar' nicht verschwinden, nachdem sie aus' tableData' gelöscht wurde? –

+0

Aber es funktioniert! Ich war mir unsicher, '.val()' zu benutzen, aber danke für die Klarstellung. –

+0

Nein, nur 'foo', das ist der Wert in' itemName' –

Verwandte Themen