Peder: UND-Verknüpfung in Jquery?

Hallo!

Problem:
Ich würde gerne mit Jquery auf TR zugreifen wenn 2 Bedingungen erfüllt werden. Und zwar
WENN div[NAME='a'][VALUE*='123'] UND div[NAME='b'][VALUE*='456']
Einfach bekomme ich das hin, also zB nur
div[NAME='b'][VALUE*='456']
das geht wunderbar.

Sollte Ich mir über einen anderen Aufbau Gedanken machen?
Wenn ja wie würdet Ihr das aufbauen?

Aufbau:

<TABLE>  
<TR>  
	<TD>  
		<DIV NAME="a" VALUE="123">123</DIV>  
	</TD>  
	<TD>  
		<DIV NAME="b" VALUE="456">456</DIV>  
	</TD>  
</TR>  
<TR>  
	<TD>  
		<DIV NAME="a" VALUE="789">789</DIV>  
	</TD>  
	<TD>  
		<DIV NAME="b" VALUE="10">10</DIV>  
	</TD>  
</TR>  
</TABLE>
  
<script src="jquery-1.3.2.min.js" type="text/javascript"></script>  
<script type="text/javascript">  
$(document).ready(function(){  
	 $("div[NAME='a'][VALUE*='123'][NAME='b'][VALUE*='456']").closest("TR").css("background-color","#0000FF");  
});  
</script>

Peder

  1. Sollte Ich mir über einen anderen Aufbau Gedanken machen?

    Ja - mir ist z.B. das VALUE-Attribut auf einem http://de.selfhtml.org/html/referenz/attribute.htm#div@title=div-Element nicht geläufig.

    Ansonsten ist das Problem relativ einfach lösbar:
    $('selektor1', $('selektor2)).closest('tr'); sollte ausreichen

  2. Aufgrund der Fragestellung kommt mir mal wieder der Gedanke "Ist da irgendwo ein Nest?" bzw. "Sockenpuppe?"

    Geht das nur mir so?

  3. Hi,

    WENN div[NAME='a'][VALUE*='123'] UND div[NAME='b'][VALUE*='456']

    div besitzt in html weder das name noch das value Attribut. Warum verwendest Du nicht Klassen, von denen Du durchaus mehrere vergeben darfst?
    Ggf kannst Du auch mit each über die per Selektor gefundenen Elemente loopen und dann weiter filtern.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Ggf kannst Du auch mit each über die per Selektor gefundenen Elemente loopen und dann weiter filtern.

      Ist doch nicht notwendig, der jQuery-$-Funktion kann man einen Kontext mitgeben.

  4. Ich bin kein Jquery-Profi, sorry!....

    Wie sollte ich es denn Eurer Meinung nach aufbauen, so dass die Selektion möglichst SIMPEL bleibt. Ich möchte unter Umständen nicht nur 2 sondern durch aus n Spalten abfragen.

    Also Grundsätzlich:
    Ich möchte einfach nur ne Alternative zu SQL-Abfragen in vereinfachter JQuery Form. mit den Simplen Abfragen *= oder contains('anything') WHERE NAME='feldname'

    Aber auf jeden Fall als Tabelle! ;-)

    Ist nämlich gar nicht so einfach...
    und ich dachte ich scheiß mal auf konformes HTML und missbrauche mir das DIV wie ich es brauche :-) hehe... aber die schreibweise
    $('selektor1', $('selektor2')).

    klappt erstens nicht und zweitens finde ich sie doof :)

    naja vll hat ja jemand nen Ansatz..

  5. Hi!

    Ich würde gerne mit Jquery auf TR zugreifen wenn 2 Bedingungen erfüllt werden. Und zwar
    WENN div[NAME='a'][VALUE*='123'] UND div[NAME='b'][VALUE*='456']

    Die Selektion bei jQuery richtet sich ja nach CSS-Syntax. Dort ist es nicht vorgesehen, dass man Elemente selektiert, die bestimmte Nachfahren enthalten, sondern immer nur ungekehrt, also Elemente mit bestimmten Vorfahren. (Das lässt sich auch einfacher ermitteln, wenn man den Stammbaum immer nur zur Wurzel zurückverfolgen muss und nicht rekursiv sämtliche Äste und Blätter abklappern muss.) Und so kannst du zunächst einmal nur eines der DIV-Elemente finden und musst dir dann das dazugehörige TR suchen. Das heißt, du bekommst unter Umständen ein Array mit beim ersten Vergleich passenden DIVs und deren nächstliegende TRs. Damit kommst du aber nicht direkt weiter, zumindest sehe ich unter den Traversing-Methoden keine, die dir auf einfache Weise auch noch die ungewollten Elemente wegfiltert (und anderenorts auch nicht).

    Aber du kannst den gleichen Vorgang wie eben nochmal anwenden, jedoch etwas modifiziert. Du selektierst nun die DIVs nach der zweiten Bedingung, gibst aber als context die im ersten Schritt ermittelte Menge an. Damit bekommst du nun die anderen DIVs und kannst wiederum davon zum TR "hochgreifen".

    Lo!

    1. Ja zu einem ähnlichen Entschluss bin ich auch gekommen.
      Ich werden einfach in einer schleife jeweils ein Array mit TR_IDs ermitteln und alle Arrays zu einer Suche abgleichen mit array_intersect(). So erhalte ich wiederum ein Array das ich wieder loopen "muss" um die einzelnen Aktionen zu den einzelnen TR_IDs ausführen zu können.

      Finde ich nicht schön.

      Peder

      1. Finde ich nicht schön.

        Dein Weg klingt an sich sehr umständlich. Vielleicht schilderst du einfach was du machen willst und wir sagen dir wie es vielleicht einfacher geht. Normalerweise braucht man ganz selten die ID von Elementen.

        Struppi.

        1. Vielleicht schilderst du einfach was du machen willst und wir sagen dir wie es vielleicht einfacher geht.

          Ja das wäre nicht schlecht ;-)

          ?t=194435&m=1300318

          Ich möchte im Grunde eine Mehrspaltige Tabelle nach Ihren Spalten-Namen und deren VALUE selektieren.

          [NAME=spaltenname][VALUE*=any] AND [NAME=spalte2][VALUE*=thing]

          Das betrifft dann n Zeilen und diese sollen wie gesagt meinetwegen markiert werden oder sonst irgendeine Aktion damit vollbracht werden.

          HTML-Struktur ist egal... Hauptsache einfacher Jquery-Handle

          Peder

          1. Vielleicht schilderst du einfach was du machen willst und wir sagen dir wie es vielleicht einfacher geht.

            Ja das wäre nicht schlecht ;-)

            ?t=194435&m=1300318

            Das hatte ich gelesen aber nicht verstanden.

            Ich möchte im Grunde eine Mehrspaltige Tabelle nach Ihren Spalten-Namen und deren VALUE selektieren.

            Das Problem ist, es gibt keinen Spaltennamen. Du meinst den Inhalt des headers? und mit value meinst du den Inhalt einer Zelle. Da wird es schierig, dafür gibt es in JS keine Funktionen auch jquery bietet dafür nichts.

            [NAME=spaltenname][VALUE*=any] AND [NAME=spalte2][VALUE*=thing]

            Das betrifft dann n Zeilen und diese sollen wie gesagt meinetwegen markiert werden oder sonst irgendeine Aktion damit vollbracht werden.

            Du müßtest dir einen eigenen Selektor schreiben, der die Tabellenstruktur durchsucht. Das ist aber relativ einfach es gibt für Tabellen eine rows und für jede Reihe eine cell-Collection.

            Struppi.

            1. grade gefunden
              .../tablefilter/...

              Peder

      2. Hi!

        Ja zu einem ähnlichen Entschluss bin ich auch gekommen.
        Ich werden einfach in einer schleife jeweils ein Array mit TR_IDs ermitteln und alle Arrays zu einer Suche abgleichen mit array_intersect(). So erhalte ich wiederum ein Array das ich wieder loopen "muss" um die einzelnen Aktionen zu den einzelnen TR_IDs ausführen zu können.

        array_intersect() finde ich unter jQuery nicht und es klingt auch nicht nach Javascript, eher PHP. Wenn du aber schon mit PHP (oder was auch immer) suchen kannst, brauchst du doch nur bei der Ausgabe die betroffenen TR-Elemente mit einer Klasse versehen, die in CSS mit den gewünschten Werten versehen ist. Die Kriterien sollten sich in PHP einfacher anhand der Rohdaten auswerten lassen als über den Umweg HTML-DOM-Javascript.

        Lo!

        1. Es soll doch auch "Live" nutzbar sein.

          phpjs.org/.../

          Peder