mark: unfassbar, es geht, aber warum?

Beitrag lesen

es ist einfach unfassbar, der Lösungsvorschlag von mark geht

Der Lösungsvorschlag von Roadster würde auch "gehen", wenn du ihn verstanden hättest.

Der Code von Roadster hat mit deinem CSS-Selektor nicht harmoniert, da CSS-Selektoren per Definition einen 1-index haben und Roadster für die Zeilenangaben einen 0-index verwendet.

POC:  http://jsfiddle.net/yo12pnkL/

aber wiiiiisooo ?

Ich glaube, es lag daran, dass du deinen CSS-Selektor geändert/korrigiert hast.

Das Einzige was ich zuvor abgeändert habe ist der Selector
statt
$( "#box-"+TypeId+" tbody tr :nth-child("+child+")
greife ich nun mit
$( "#box-"+TypeId+" .week:nth-child("+child+")

.. und genau da lag wahrscheinlich der Fehler.

Eine fundamentale Kompetenz, um Code zu verstehen ist das Debugging. Du musst lernen deinen Code zu debuggen. Spätestens, wenn du console.log() verwendest wirst du sehen, dass beide Ausdrücke sehr unterschiedliche Ergebnisse liefern.

Dies liegt an den unterschiedlichen css-Selektoren:
$(#box-"+TypeId+" tbody tr :nth-child("+child+"));
Hier machst du zweierlei Fehler.
1. "tbody tr" Selektiert _ALLE_ tr-Elemente in tbody, also auch jene, die von deinem Slider-Plugin geladen werden (Unterschied descendant und child). Wenn du nur die tr-Elemente in der ersten Tabellen-Ebene selektieren (child) möchtest, machst du das mit dem child-Selektor ">";
Unterschied: tbody tr und tbody > tr.

2. "tr :nth-child()" Da gehört offensichtlich kein Leerzeile zwischen tr und :nth-child(). Du möchtest ja die N-te tr-Zeile selektieren. Das macht man ohne Leerzeile: tr:nth-child.
Leider reicht mein Wissen nicht aus, um zu erklären, wie sich jQuery, oder CSS verhält, wenn das nth-child nicht vorhanden ist.

Korrigiert sieht das dann z.B. so aus:
$(#box-"+TypeId+" tbody > tr:nth-child("+child+"));
Diese korrigierte Version ist nun für deine Anwendung und nur für deine Anwendung identisch mit:
$( "#box-"+TypeId+" .week:nth-child("+child+"));
So sollten beide Varianten funktionieren.

ABER, ABER, ABER,...

// child enthält dabei die ermittlte Zeilenzahl aus dem Lösungsvorschlag von mark.

$( "#box-"+TypeId+" .week:nth-child("+child+") input[name*='"+on+"']" ).each(function() {

var name = $(this).attr("name");
var val = $(this).val();
$(this).val("");
});

Dieser Code ist, wie schon von jedem hier in weiser Vorhersehung angemerkt, überflüssig. Du brauchst keine Zeilennummer, um anschließend ein Objekt der Zeile zu erhalten. Weil du das Objekt der Zeile ja schon hast.  
Weiters brauchst du kein each(). Wenn deine Funktion korrekt arbeitet bekommst du als Rückgabewert nur \_EIN\_ Objekt, und nicht eine Liste von Objekten. Sprich der user kann immer nur auf eine Zeile klicken und nicht gleichzeitig auf mehrere.  
  
Bei meinem Code ist das Zeilen-Objekt schon in der Variable tr drin. `var tr = $(this).closest('tr');`{:.language-javascript} Mit der Variable tr kannst du die Zeile beliebig manipulieren. In Roadsters Code ist die Zeile in der Variable c[i].
0 47

jQuery Child-Stelle ermitteln bei click

Rainerme
  • java
  1. 0

    Element ermitteln bei Ereignis

    Mattes
    • javascript
    1. 0

      hoffe das ist besser Verständlich

      Rainerme
      1. 0
        Matthias Apsel
        1. 0

          ohweia ich und Beschreiben

          Rainerme
          1. 0
            Matthias Apsel
            1. 0
              Rainerme
              1. 0
                Gunnar Bittersmann
                1. 0
                  Reinerme
                  1. 0
                    mark
                    1. 0
                      Rainerme
                      1. 0
                        Matthias Apsel
                        1. 0
                          Rainerme
                          1. 0
                            Gunnar Bittersmann
                      2. 0
                        Roadster
                        1. 0
                          Gunnar Bittersmann
                          1. 0
                            Roadster
                            1. 0
                              Camping_RIDER
                              1. 0
                                Roadster
                      3. 0
                        mark
                        1. 0

                          unfassbar, es geht, aber warum?

                          Rainerme
                          1. 0
                            mark
                            1. 0
                              Matthias Apsel
                              1. 0
                                mark
                  2. 0
                    Matthias Apsel
                    1. 0
                      Rainerme
                      1. 0
                        Roadster
                      2. 0
                        Matthias Apsel
                  3. 0
                    Gunnar Bittersmann
      2. 0
        Roadster
        1. 0
          Rainerme
          1. 0
            Roadster
            1. 0
              Roadster
            2. 0
              Roadster
            3. 0
              Rainerme
              1. 0
                Gunnar Bittersmann
              2. 0
                Roadster
              3. 0
                Roadster
        2. 0
          1UnitedPower
          1. 0
            Roadster
          2. 0
            Roadster
            1. 0
              1UnitedPower
      3. 0
        mark
        1. 0
          Rainerme
          1. 0
            mark
        2. 0
          1UnitedPower
  2. 0
    mark