2016-11-25 14 views
0

Ich möchte eine zusätzliche Zeile mit einigen zusätzlichen Berechnungen zu einer vorhandenen Tabelle hinzufügen. Die Tabelle hat kein Header-Tag, es wird nur herausgefunden, was CSS für sich selbst anwenden soll. Ich füge einen zusätzlichen Header über den unten angegebenen Code hinzu. Im Moment wird der Header zweimal hinzugefügt. Die (bearbeitete) Code der Tabelle sieht wie folgt aus:jQuery führen nur .append einmal aus

<!--This code is in a <form> with the id="train_form", hence the usage in the jQuery code--> 
<table class="vis" style="width: 100%"> 
    <tbody> 
     <tr> 
      <th style="width: 20%">Eenheid</th> 
      <th style="min-width: 400px">Behoefte</th> 
      <th>In het dorp/Totaal</th> 
      <th style="width: 120px">Rekruteren</th> 
      <th style="width: 80px">To Do:</th> 
     </tr> 

     <tr class="row_a"> 
      <td class="nowrap"> 
       <a href="#" class="unit_link" data-unit="spear"> 
        <img src="image.png" style="vertical-align: middle" alt="" class=""> 
        Speervechter 
       </a> 
      </td> 
     </tr> 
     <!-- There are 3 more entries here, but to not be too long I've removed them. They are not really necessary--> 
     <tr> 
      <td colspan="3"> 
      </td> 
      <td> 
       <input class="btn btn-recruit" style="float: inherit" type="submit" value="Rekruteren" tabindex="11"> 
      </td> 
      <th style="width: 80px">To Do:</th> 
     </tr> 
    </tbody> 
</table> 

Die Linien <th style="width: 80px">To Do:</th> werden durch mein Skript hinzugefügt. Das Problem ist, dass es auch zu der letzten <td> hinzugefügt wird. Ich habe mir einige "Lösungen" angesehen, aber sie helfen nicht. Es fügt immer noch den Code zweimal hinzu (siehe Screenshot unten).

Example

Der Code, den ich die Zeilen hinzufügen bin mit:

$(function() { 
    var done = false; 
    if (!done) { 
     $("#train_form > .vis > tbody > tr:not(.row_a, .row_b)").one().append("<th style='width: 80px'>To Do:</th>"); 
     done = true; 
    }; 
}).one(); 

Wie Sie sehen, ich habe die .one() Methoden versucht, mit, und ich habe versucht, für einen Bool mit es. Beides funktioniert nicht, da dieser Code immer noch die Tabelle im obigen Bild enthält.

Nur um klar zu sein, ich habe keine Kontrolle über die Quelle, das ist ein Skript für ein Online-Browser-Spiel.

Was mache ich falsch?

+0

http://api.jquery.com/one/ Ich bin verwirrt über Ihre versuchte Nutzung von 'on()'. Mit welcher API siehst du, dass du denkst, dass es so benutzt werden kann? – Taplar

+0

Nun, im Grunde nur herumalbern und versuchen zu versuchen. Ich habe mir die Beispiele auf der von Ihnen erwähnten API-Seite angesehen. Abgesehen davon habe ich diese Quellen verwendet: http://stackoverflow.com/questions/34476696/jquery-append-div-only-once-on-click, http://stackoverflow.com/questions/24206953/jquery-append -only-once & http://stackoverflow.com/questions/24076422/how-to-execute-jquery-code-only-once – MagicLegend

+0

@Taplar, ich vermute, er war hinter 'first()' statt 'one() '. – Paul

Antwort

3

Ich glaube, Sie wollen $.first() statt $.one():

$("#train_form > .vis > thead > tr:not(.row_a, .row_b)") 
    .first() 
    .append("<th style='width: 80px'>To Do:</th>"); 
+0

Wie gesagt: "Um es klar zu sagen, ich habe keine Kontrolle über die Quelle, dies ist ein Skript für ein Online-Browserspiel." Es ist leider nicht so einfach ... Sonst hätte ich das jetzt schon gemacht;) – MagicLegend

+1

Ah, schieße. Es tut mir leid, dass ich nicht aufmerksam gelesen habe. Ich werde darüber noch etwas nachdenken und wenn ich meine Antwort ändern kann, werde ich es sonst löschen. – Paul

+0

Ja! Das ist es! Es funktioniert jetzt korrekt. Ich danke dir sehr! Es gibt so viele dieser Anrufe, ich kann mich nicht an alle erinnern: p Fall geschlossen. Danke für Ihre Hilfe! – MagicLegend