Hirny: JQuery / Selektoren Funktion übergeben

Hallo,

Ich habe versucht eine Funktion zu schreiben die 2 Selektoren erwartet.
Mein Versuch das über nur ein Argument zu steuern ist gescheitert!

Mit 2 Argumenten gehts:

function sum(sela,selb){ $(sela,selb).each(....
summe = sum('.selektor1','.selektor1');

Tsja.. ich denke aber, dass es auch mit nur einem Argument geht, ABER WIE?

'.selektor1,.selektor1' wird als String erkannt und nicht als Argument(e)
Ebenso
"'.selektor1','.selektor1'"
ect...

Evtl ein weg über Arrays??

Danke!
Hirny

  1. function sum(sela,selb){ $(sela,selb).each(....

    Spontan:
    $(selektor1).add(selektor2).each() ...

    Aber ersthaft: was hast du eigentlich vor?

    1. Nachtrag: natürlich ist $(selektor1 + ',' + selektor2).each() ebenfalls möglich.

      Möglicherweise scheiterst du ganz einfach an JavaScript-Grundlagen: http://de.selfhtml.org/javascript/objekte/string.htm

    2. Hi!

      Aber ersthaft: was hast du eigentlich vor?

      Also ich habs jetzt anders gelöst, so dass das zu selektierende Element eine einheitlich Klasse besitzt.

      <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1 Sx" ID="1>"></TD></TR>
      <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1 Sx" ID="2"></TD></TR>
      <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1 Sx" ID="3"></TD></TR>
      <TR CLASS="y"><TD><INPUT TYPE="text" CLASS="selektor1 Sy" ID="4>"></TD></TR>
      <TR CLASS="y"><TD><INPUT TYPE="text" CLASS="selektor1 Sy" ID="5"></TD></TR>
      <TR CLASS="y"><TD><INPUT TYPE="text" CLASS="selektor1 Sy" ID="6"></TD></TR>

      Ich selektiere also nach Sx, aber Theroetisch ist es doch auch möglich die provisorische class weg zu lassen...

      <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1" ID="1>"></TD></TR>
      <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1" ID="2"></TD></TR>
      <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1" ID="3"></TD></TR>
      <TR CLASS="y"><TD><INPUT TYPE="text" CLASS="selektor1" ID="4>"></TD></TR>
      <TR CLASS="y"><TD><INPUT TYPE="text" CLASS="selektor1" ID="5"></TD></TR>
      <TR CLASS="y"><TD><INPUT TYPE="text" CLASS="selektor1" ID="6"></TD></TR>

      ...und nach x oder y und selektor1 zu selektieren?

      So ist das gemeint :-)

      Hirny

      1. Ich selektiere also nach Sx, aber Theroetisch ist es doch auch möglich die provisorische class weg zu lassen...

        Das ist der Sinn von Selektoren - es ist auch praktisch möglich. Praktisch ist es auch möglich auf wesentlich mehr von deinem Zeug zu verzichten - dafür musst du dich aber in erster Linie darum kümmern, dein HTML aufzuräumen. Dein HTML ist gelinde gesagt fürchterlich und vor allem ungültig.

        Erstelle eine ordentliche HTML-Struktur - später mache dir gedanken um das auswählen einzelner Elemente - nicht vorher schon irgendwelche nutzlosen Klassen und IDs hineinpacken.

        1. Sorry...

          Erstelle eine ordentliche HTML-Struktur - später mache dir gedanken um das auswählen einzelner Elemente - nicht vorher schon irgendwelche nutzlosen Klassen und IDs hineinpacken.

          ...woher willst du wissen was ich davon brauche und was nicht?
          die IDs sind wichtig, weil diverse "Regeln" verarbeitet werden die eben unique angesprochen werden müssen. Ebenso brauche ich Group-Selektoren.
          Was ist an meinem HTML denn schlecht?? Also ohne kleinlich zu werden...

          Hirny

          1. ...woher willst du wissen was ich davon brauche und was nicht?

            Nein, ich würde gerne wissen, was du vor hast - ich vermute nämlich, du weisst selbst nicht genau was du eigentlich brauchst (weil du vermutlich den Sinn und die Mächtigkeit von CSS-3-Selektoren[1] noch nicht entdeckt hast) und was nicht, sonst sähe dein HTML nicht so aus und du würdest weniger mit IDs und Klassen herumschleudern - sprich was du eigentlich machen möchtest, nicht welche technischen Gegebenheiten dir vorschweben.

            Erstelle ein "Pflichtenheft"[2] aus Sicht von klein Mäxchen der keine Ahnung von Technik hat und definiere, was passieren soll.

            Dann erstelle ein HTML-Dokument ohne den Gedanken an Layout (CSS) zu verschwenden und ohne die Dynamik vorzusehen. Wenn du dann (ohne den Projekthintergrund zu kennen) die logischen zusammenhänge der Elemente aus diesem Dokument entnehmen kannst, bist du auf gutem Weg.

            die IDs sind wichtig, weil diverse "Regeln" verarbeitet werden die eben unique angesprochen werden müssen. Ebenso brauche ich Group-Selektoren.
            Was ist an meinem HTML denn schlecht?? Also ohne kleinlich zu werden...

            Eine ID darf z.B. keinen rein nummerischen Wert enthalten (bzw. nicht damit beginnen).

            Zusamengehörige Elemente in Formularen gruppiert man sinnvollerweise mit fieldset-Elementen.

            Formuarfelder sollten für die Weiterverarbeitung ein name-Attribut haben um sie ggf. nach einem POST oder GET identifzieren zu können (bzw. die übermittelten Werte).

            Wenn die Anzahl der Input-Felder aufgrund ihrer Reihenfolge ohnehin definiert ist, fallen IDs ebenfalls weg, da die Elemente aufgrund ihrer Reihenfolge selektiert werden können.

            Aktuell würde sowas völlig ausreichen um die Logik deines Codeschnipsels darzustellen (ohne jetzt weiteres hintergrundwissen zu haben)- alles weitere ist imho (vorerst) unnötiger Ballast der absolut keine Bereicherung hinsichtlich dem selektieren einzelner Elemente darstellt:

            <fieldset>  
              <input type="text" />  
              <input type="text" />  
              <input type="text" />  
            </fieldset>  
            <fieldset>  
              <input type="text" />  
              <input type="text" />  
              <input type="text" />  
            </fieldset>
            

            [1] welche dir dank Sizzle in jQuery zur Verfügung stehen.
            [2] ein Schmierzettel, wo draufsteht was wann wo und wie passieren soll.

            1. ...woher willst du wissen was ich davon brauche und was nicht?
              Nein, ich würde gerne wissen, was du vor hast

              Ja erzähl ich gerne:
              In einer Tabelle sollen wie bei Excel in Spalte "A" Werte eingegeben werden und die werden dann Multipliziert und Summiert...
              Dabei hat jedes Eingabe-Feld eine Eindeutige ID. Denn somit können Regeln festgelegt werden Zb "Wenn A1 != 0 dann Sperre A2".
              Das ganze wird noch mal in Gruppen unterteilt und so ensteht

                
              <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1" ID="A1>"></TD></TR>  
              <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1" ID="A2"></TD></TR>  
              <TR CLASS="x"><TD><INPUT TYPE="text" CLASS="selektor1" ID="A3"></TD></TR>  
              <TR CLASS="y"><TD><INPUT TYPE="text" CLASS="selektor1" ID="A4>"></TD></TR>  
              <TR CLASS="y"><TD><INPUT TYPE="text" CLASS="selektor1" ID="A5"></TD></TR>  
              
              

              Warum da überall die CLASS mit selektor1 steht liegt dadran das ich den Code vereinfacht darstellen möchte und da noch 2 weitere input-Felder hingehören mit weitere CLASSes...

              Eine ID darf z.B. keinen rein nummerischen Wert enthalten (bzw. nicht damit beginnen).

              Ja hat Sie in meinem Programm ja auch nicht, aber gewusst habe ich das auch noch nicht. Danke :-)

              Formuarfelder sollten für die Weiterverarbeitung ein name-Attribut haben

              Das habe ich auch zwecks Anschaulichkeit entfernt :-)

              Wenn die Anzahl der Input-Felder aufgrund ihrer Reihenfolge ohnehin definiert ist, fallen IDs ebenfalls weg, da die Elemente aufgrund ihrer Reihenfolge selektiert werden können.

              Nein, das ist auch nicht der Fall.

              <fieldset>

              <input type="text" />
              ...

              kommt leider nicht in Frage da es sich um eine Tabelle handelt (Zwingend!)  
                
              Was ist an Sizzle jetzt noch mal besser als an JQuery selbst?  
                
              Danke  
              Hirny
              
              1. Dabei hat jedes Eingabe-Feld eine Eindeutige ID. Denn somit können Regeln festgelegt werden Zb "Wenn A1 != 0 dann Sperre A2".

                Dann brauchst du die ID aber nicht, da aufgrund der Position innerhalb der Tabelle ohnehin jede Zelle eindeutig identifiziert werden kann.

                A1 ist also die Zelle 0 (A) in der Zeile 0 (1).

                Warum da überall die CLASS mit selektor1 steht liegt dadran das ich den Code vereinfacht darstellen möchte und da noch 2 weitere input-Felder hingehören mit weitere CLASSes...

                Die du dann vermutlich auch nicht brauchen wirst?

                Das habe ich auch zwecks Anschaulichkeit entfernt :-)

                Als Name-Atrribute könnte sich z.B. zelle[A1], zelle[A2] oder zelle[A][1] Zelle[A][2] usw eignen. Das würde ebenfalls die ID obsolet machen (außer es gibt noch ein label mit for-Attribut).

                kommt leider nicht in Frage da es sich um eine Tabelle handelt (Zwingend!)

                Dann mach bitte eine Tabelle - aktuell hast du eine Tabelle mit einer Spalte - also eigentlich eine 1-Dimensionale-Liste, das hat mich verwirrt :)

                Was ist an Sizzle jetzt noch mal besser als an JQuery selbst?

                Sizzle ist die Selektor-Engine von jQuery - also das Ding, welches dir innerhalb jQuery erlaubt, CSS3-Selektoren zu verwenden.

                anstatt document.getElementByID('A') kannst du in jQuery $('#A1') oder $('table tr:nth-child(1) td:nth-child(1) input') notieren. Die zweite Variante ist zwar länger, du sparst dir aber zusätzliche Atrribute im HTML-Code. Bei 6 Zellen ist das noch egal - aber wenn du 1000 Zellen hast, sparst du dir bereits 1000 ID-Attribute und machst damit deinen HTML-Code um einiges kleiner während das JavaScript nur um ein paar Zeichen länger wird.