Aloha ;)
Genau, so dachte ich das auch
Ich muss kurz meinen Gedankengang erklären damit Du mir meinen Denkfehler beschreiben kannstda ich ja
stets immer ein Elternelement habe was eindeutig ist und zwar im gesamten geladenen HTML-Dokument, dachte ich, ich könne dann stets über dieses die Zeilen finden auch wenn diese nicht eindeutig sind im Gesamt-Dokument. Da sie ja eindeutig im dazugehörigen Eltern-Element sind.So wie Du es oben monierst, wäre wohl dann bei solch einer Vorgehensweise eine Deklarierung über class= besser.
Wieso? dort würde dann docj auch nur class="row1" bzw. row2 stehen
Genau. Der Unterschied ist einfach. Ein Wert für id muss immer bezogen auf das gesamte document eindeutig sein, es genügt keine Eindeutigkeit innerhalb des Elternelements. Das liegt an der Definition von id in der HTML-Spezifikation. Class hingegen ist deutlich allgemeiner und weniger restriktiv. Einerseits dürfen mehrere Elemente im document dieselbe Klasse haben (nicht aber die selbe id) und andererseits darf ein Element auch mehreren Klassen angehören (durch Leerzeichen getrennt).
es würde dann nur so aussehen
<div class="box1">
<div class="row1>
<input type="text" name="phsuessmin"/>
</div>
<div class="row2>
<input type="text" name="phsuessmin"/>
</div>
</div><div class="box2">
<div class="row1>
<input type="text" name="phsuessmin"/>
</div>
<div class="row2>
<input type="text" name="phsuessmin"/>
</div>
</div>
Nicht ganz. Die divs mit box1, box2 dürfen gerne weiter statt über class per id angesprochen werden - denn diese kommen ja im document nur genau einmal vor im Gegensatz zu row1,row2. Zumindest in diesem Beispiel würde ich sowas benutzen:
~~~html
<div id="box1">
<div class="row1">
<input type="text" name="phsuessmin"/>
</div>
<div class="row2">
<input type="text" name="phsuessmin"/>
</div>
</div>
<div id="box2">
<div class="row1">
<input type="text" name="phsuessmin"/>
</div>
<div class="row2>
<input type="text" name="phsuessmin"/>
</div>
</div>
Noch besser ist aber, wie du ja letztendlich auch ähnlich benutzt:
<div id="box1">
<div>
<input type="text" name="phsuessmin"/>
</div>
<div>
<input type="text" name="phsuessmin"/>
</div>
</div>
<div id="box2">
<div>
<input type="text" name="phsuessmin"/>
</div>
<div>
<input type="text" name="phsuessmin"/>
</div>
</div>
Und Ansprache der Elemente dann über den Code, den du gepostet hast.
Unnötige Vergabe von Klassen und id's sollte im Sinne der best practice nähmlich vermieden werden. In diesem Sinne könntest du auch die inneren div's weglassen, aber ich ahne, dass das nur hier im Minimalbeispiel so ist.
Unter oben genanntem Vorbehalt, ja. Vorausgesetzt die jQuery-Funktion find findet immer nur ein Element.
das von mir, war nur ein Beispiel. Da ich mehrere Eingabefelder habe die jedoch im Mittelteil des name="*sues*" oder eben *salz* stehen haben kann ich das ganze unter jQuery mit each durchforsten.
Passt.
wenn ich dazu noch den aus dem Button data-row oder data-boxid usw. mir mit übergeben lasse, kann ich nun direkt in der entsprechenden Zeile suchen, so finde ich nur das was ich brauche und muss nicht 100 Filter einbauen wie ich das bis jetzt hatte.
Da ich stets immer die gleichen Buttons verwendet ermittle ich nun (ist nun auch fast erledigt) aus welchem Eltern-Element also welcher box der Button abgefeuert wurde, ziehe mir die data- und suche so dann in den Felder
gut oder?
Ja, ist eine legitime Möglichkeit.
Hoffe diese Schreibweise ist nicht zu chaotisch, aber in der ersten Testumgebung funktioniert es
$( "#box"+box+" div:nth-child("+row+") input[name*='Salz']" ).each(function(){
var name = $(this).attr("name");
var id = $(this).attr("id");
var val = $(this).val();
alert("Button 1 in Box "+box+" mit row = "+row+" mit text "+val);
});
Sieht soweit ganz gut aus.
> da ich aber nun noch das Problem hatte das ich ja wissen muss von welchem Button aus geklickt wurde
> da es ja nur 2 versch. Buttons gibt also Button1 und Button2 diese aber in der einen Registerkarte schon mal geladen wurden konnten und in der nächsten Registerkarte wieder geladen werden können
> ermittle ich diese nun mit
>
> Dabei habe ich nun den die Buttons als button declariert und nicht mehr als <input
> wenn ich den Button ermittelt habe, übergebe ich dann die gefundenen data- Werte an die jQuery Suchfunktion mit dem each
> (siehe oben) ich muss es jetzt nur noch richtig zusammensetzen aber von der Grundidee sollte es gehen oder?
>
>
> ~~~javascript
>
> $(':button').click(function(){
> welcherbutton(this);
> });
>
>
> function welcherbutton(btn){
> id = $(btn).val();
> var klasse = $(btn).attr('class');
> var box = $(btn).attr('data-box');
> var row = $(btn).attr('data-row');
> alert("es wurde der button aus box: "+box+" und aus zeile : "+row+" geklickt mit class :"+klasse+" und id "+id)
> }
>
>
>
Auch das sieht legitim aus. Wobei ich :button nicht verstehe. Ein Schreibfehler? Sonst passts.
JavaScript:
document.querySelector('#box1 .row2')
Und unter jQuery wahrscheinlich:$('#box1 .row2')
so habe ich das doch fast schon oben gemacht oder?
Ja, hast du.
gut es war ein reiner Zufall durch ewiges probieren.
aber werde mal im Netz nach Deinem Hinweis suchen damit ich es besser kapiere wie das genau funktioniert
Naja, dazu reicht unsere Dokumentation, es geht ja um CSS-Selektoren und Kombinatoren. Wenns um was anderes geht hab ich noch nicht verstanden, was du noch nicht kapierst ;)
Grüße,
RIDER
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[