Tim: JQuery Selektoren (not)

Hallo,

ich möchte alle chosen-Elemente auswählen, die aber gleichzeitig nicht innerhalb eines tab1 oder tab3 Elementes sind.

  
    $(".chosen:not(#tab3 .chosen)", ".chosen:not(#tab1 .chosen)").chosen({  

scheint das aber nicht zu machen.

Kann mir jemand auf die Sprünge helfen?

Tim

  1. Om nah hoo pez nyeetz, Tim!

    ich möchte alle chosen-Elemente auswählen, die aber gleichzeitig nicht innerhalb eines tab1 oder tab3 Elementes sind.

    $(".chosen:not(#tab3 .chosen)", ".chosen:not(#tab1 .chosen)").chosen({

    
    >   
    > scheint das aber nicht zu machen.  
      
    Im Gegensatz zu nativem JS erlaubt JQuery auch Kombinatoren als Argument für `:not`{:.language-javascript}.  
      
    Bastle ein Beispiel bei <http://jsfiddle.net/>  
      
    Matthias
    
    -- 
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen [Los und Losung](http://selfhtml.apsel-mv.de/java-javascript/index.php?buchstabe=L#los).  
    ![](http://www.billiger-im-urlaub.de/kreis_sw.gif)  
    
    
  2. Tach!

    ich möchte alle chosen-Elemente auswählen, die aber gleichzeitig nicht innerhalb eines tab1 oder tab3 Elementes sind.

    $(".chosen:not(#tab3 .chosen)", ".chosen:not(#tab1 .chosen)").chosen({

    
    > scheint das aber nicht zu machen.  
      
    Hast du mal in der jQuery-Syntaxbeschreibung nachgeschaut, was ein zweiter Parameter für eine Bedeutung hat? Es ist mitnichten so, dass man da mehrere Selektoren als Argumente angeben kann. Also, das kann man schon, nur müssen die innerhalb eines Strings stehen, so wie die Selektoren bei CSS.  
      
    Für deinen Fall müssen die beiden Bedingugnen logisch-and verknüpft werden. Getrennt betrachtet bringt der jeweils andere Ausdrück die jeweils vom anderen ausgeschlossenen Elemente in die Ergebnismenge.  
      
    Eine Möglichkeit wäre erstmal alle chosen-Elemente zu selektieren und dann mit zwei angehängten .not() die beiden Bedingungen darauf anwenden.  
      
      
    dedlfix.
    
    1. Om nah hoo pez nyeetz, dedlfix!

      Für deinen Fall müssen die beiden Bedingugnen logisch-and verknüpft werden. Getrennt betrachtet bringt der jeweils andere Ausdrück die jeweils vom anderen ausgeschlossenen Elemente in die Ergebnismenge.

      Eine Möglichkeit wäre erstmal alle chosen-Elemente zu selektieren und dann mit zwei angehängten .not() die beiden Bedingungen darauf anwenden.

      Ich hab interessehalber mal gefiddlet:

      $('span:not(#t1 span, #t3 span)').css('background-color','red'); leistet das Verlangte.

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Mus und Mustang.

      1. Hi Matthias,

        $('span:not(#t1 span, #t3 span)').css('background-color','red'); leistet das Verlangte.

        Genauso habe ichs auch gemacht. Du warst nur etwas schneller.

        Tim

      2. Tach!

        Eine Möglichkeit wäre erstmal alle chosen-Elemente zu selektieren und dann mit zwei angehängten .not() die beiden Bedingungen darauf anwenden.
        $('span:not(#t1 span, #t3 span)').css('background-color','red'); leistet das Verlangte.

        Ich war mir nicht sicher, wie das :not() arbeitet. Und entgegen meiner Empfehlung in Dokumentation zu schaun, hatte ich dazu grad keine Lust. Aber so notiert sieht mir das logisch richtig aus. Das Komma ist ein OR-Operator, als Ergebnis entsteht eine Liste mit allen #t1- und #t3-spans. Und die müssen dann ausgeschlossen werden. Passt.

        dedlfix.

      3. @@Matthias Apsel:

        nuqneH

        $('span:not(#t1 span, #t3 span)').css('background-color','red'); leistet das Verlangte.

        Was hingegen schwer ist … Auch in Beispielcode. Gerade dort.

        Himmel oder Hölle?

        (Slides aus meinem Talk auf der From the Front, Bologna 2014)

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
        1. Om nah hoo pez nyeetz, Gunnar Bittersmann!

          $('span:not(#t1 span, #t3 span)').css('background-color','red'); leistet das Verlangte.

          Was hingegen schwer ist … Auch in Beispielcode. Gerade dort.

          Wie würdest du denn kurz und schmerzlos visualisieren, dass ein Selektor gegriffen hat, was er sollte?

          Mit purem CSS lässt sich das Gewünschte nur erreichen, wenn man genau weiß, welche Elemente betroffen sind, was auf einen Verzicht auf die Pseudoklasse not hinausläuft.

          Matthias

          --
          Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Dachs und Dachstuhl.

          1. @@Matthias Apsel:

            nuqneH

            Wie würdest du denn kurz und schmerzlos visualisieren, dass ein Selektor gegriffen hat, was er sollte?

            *Für mich* etwas kurz und schmerzlos visualisieren ist was anderes als '.css()' als Beispielcode posten.

            Qapla'

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
          2. @@Matthias Apsel:

            nuqneH

            Wie würdest du denn kurz und schmerzlos visualisieren, dass ein Selektor gegriffen hat, was er sollte?

            $('span:not(#t1 span, #t3 span)').addClass('siehste-funzt');

            plus
            .siehste-funzt {background: red}

            ist im Fiddle durchaus machbar.

            Wobei rot fragwürdig ist für etwas, das wie erwartet funktioniert. Grün wäre vielleicht die bessere Wahl.

            Qapla'

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    2. Hi,

      Eine Möglichkeit wäre erstmal alle chosen-Elemente zu selektieren und dann mit zwei angehängten .not() die beiden Bedingungen darauf anwenden.

      Danke.

      So scheint es zu funktionieren.

        
      $('.chosen').not('#tab1 .chosen, #tab3 .chosen').chosen({  
      
      

      Tim