Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
25
ZUGRIFFE
465
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    207
    Hallo,

    kann mir jemand von Euch näher bringen, wie der $-Operator in JS funktioniert!?

    Z.B. wird er auch für jQueryUI-Library verwendet (siehe Anhang).

    Was ich dabei nicht verstehe ist: Diesen Operator scheinen alle JS-Libs zu verwenden. Wie funktionert denn da die Zuordnung?

    Also was ich evtl. verstehen würde wäre statt
    "$('#date').datepicker();"
    statt dessen
    "jQueryUI.('#date').datepicker();" oder evtl.
    "('#date').jQueryUI.datepicker();"

    Aber "$"?
    Wo ist da der Zusammenhang mit der jQueryUI?

    Vielen Dank,
    Frank
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Das $ in JS-jqueryui.jpg  
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin Frank,

    dies $ ist kein Operator, es ist ein ganz normales Zeichen, mehr nicht.
    Sehe das $ einfach als Variablennamen an, oder im Falle von jQuery als Funktionsnamen, mehr ist es wirklich nicht.
    Geändert von Sven Mintel (09.09.10 um 20:04 Uhr)
     

  3. #3
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.205
    Blog-Einträge
    3
    @Sven Mintel: Ist dieses Zeichen überhaupt erlaubt? Bei SelfHTML steht nämlich nichts.
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Jo, ist es.

    In der Javascript-Referenz von Netscape steht:
    Variable name. It can be any legal identifier.
    Der Kern von Javascript ist standardisiert und wird auch als ECMAScript bezeichnet.
    Darüber gibt es also festgelegte Regeln, hier nachzulesen: http://www.ecma-international.org/pu...T/ECMA-262.pdf

    Und dort steht dies:
    The dollar sign ($) and the underscore (_) are permitted anywhere in an IdentifierName.
    Die älteste einsehbare Version von ECMAScript ist von 1998, und schon da ist das $ erlaubt, wenn auch "intended for
    use only in mechanically generated code"
    (was immer damit auch gemeint sein soll )

    SelfHTML ist also nicht auf dem Laufenden.
    Geändert von Sven Mintel (09.09.10 um 20:51 Uhr)
    ComFreek bedankt sich. 

  5. #5
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    207
    Also jQuery scheint sich um die Verwendung anderer Libs zu kümmern! Siehe hier:
    http://docs.jquery.com/Using_jQuery_...ther_Libraries
    Das heisst aber doch, dass jQueryUI keine anderen neben sich duldet!?
     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von FrankWST Beitrag anzeigen
    Das heisst aber doch, dass jQueryUI keine anderen neben sich duldet!?
    Nö,
    das heisst, dass dem Macher von jQuery nicht entgangen ist, dass es auch andere Frameworks gibt, welche dies $ benutzen, und dass er darauf Rücksicht nimmt, indem er eine Möglichkeit bietet, andere Frameworks zusammen mit jQuery in einem Dokument zu verwenden.
     

  7. #7
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    207
    Zitat Zitat von Sven Mintel Beitrag anzeigen
    Nö,
    das heisst, dass dem Macher von jQuery nicht entgangen ist, dass es auch andere Frameworks gibt, welche dies $ benutzen, und dass er darauf Rücksicht nimmt, indem er eine Möglichkeit bietet, andere Frameworks zusammen mit jQuery in einem Dokument zu verwenden.
    Richtig, aber jQueryUI tut genau das nicht (und viele Andere auch nicht).
    Ich habe z.B. noch ein Framework für sortierbare Tabellen. Das verwendet auch $. Und damit haben wir den Salat!? Ich kann dieses nicht zusammen mit jQueryUI verwenden.
     

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Mmmh, da hast du wohl etwas falsch gemacht, auch mit jQueryUI geht das, kannst es gerne probieren:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    <!DOCTYPE html>
    <html>
    <head>
      <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
      <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
      <style type="text/css">
        #draggable,#clickable { width: 100px; height: 70px; background: silver;border:1px dotted #000; margin:12px;}
      </style>
      <script>
      jQuery.noConflict();
      jQuery(document).ready(function() {
        jQuery("#draggable").draggable();
      });
      </script>
    </head>
    <body> 
    <div id="draggable">Drag me with jQueryUI</div>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.1.0/prototype.js"></script>  
    <div id="clickable">Click me with PrototypeJS</div>
    <script>
      $('clickable').observe('click', function(){$(this).setOpacity(($(this).getOpacity()==1)?.5:1);});
    </script>
    </body>
    </html>
    Geändert von Sven Mintel (09.09.10 um 21:29 Uhr)
    FrankWST bedankt sich. 

  9. #9
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    207
    OK, danke, schaue ich mir mal an...
     

  10. #10
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    207
    Zitat Zitat von Sven Mintel Beitrag anzeigen
    "intended for
    use only in mechanically generated code"[/I](was immer damit auch gemeint sein soll )
    Das bedeutet, dass es nur in generiertem code verwendet werden sollte. Also wie z.B. die ".Designer"-Dateien im MS-VisualStudio, die nicht manuell editiert werden sollten, da sie das Ergebnis der Manipulationen in der graphischen Oberfläche sind.
     

  11. #11
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    207
    Zitat Zitat von Sven Mintel Beitrag anzeigen
    Mmmh, da hast du wohl etwas falsch gemacht, auch mit jQueryUI geht das, kannst es gerne probieren:
    Ja, es funktioniert.
    Mein Problem ist immer noch: Warum?

    Wenn ich mir nochmal folgende Zeile anschaue:
    Code :
    1
    
    $('#date').datepicker();
    Wie kommt es, dass sich die jQueryUI-Lib dafür zuständig fühlt?
    Gut, diese hat offensichtlich eine function "datepicker()" im Bauch. Aber was, wenn eine andere Lib auch die function "datepicker()" hätte? Dann wäre das doch ein Problem? Oder?

    Schöne Grüße,
    Frank
     

  12. #12
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.205
    Blog-Einträge
    3
    Wenn du noch eine andere Lib einbindest, dann musst du jQuery.noConflict(); aufrufen.
    FrankWST bedankt sich. 
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  13. #13
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Zitat Zitat von FrankWST Beitrag anzeigen
    Wenn ich mir nochmal folgende Zeile anschaue:
    Code :
    1
    
    $('#date').datepicker();
    Wie kommt es, dass sich die jQueryUI-Lib dafür zuständig fühlt?
    Gut, diese hat offensichtlich eine function "datepicker()" im Bauch. Aber was, wenn eine andere Lib auch die function "datepicker()" hätte? Dann wäre das doch ein Problem? Oder?
    Probiers doch aus :P Rein aus dem Bauch geraus würde ich sagen, das dass Framework, das zuletzt eingebunden wurde und die "$"-Funktion hat, aufgerufen wird.

    Ich denke das beim Parsen des Dokuments vom Browser die JS Funktionen gespeichert werden und gegebenenfalls überschrieben werden wenn sie doppelt vorkommen.

    Gruß
     

  14. #14
    FrankWST FrankWST ist offline Mitglied Gold
    Registriert seit
    Jun 2007
    Beiträge
    207
    Zitat Zitat von zer0 Beitrag anzeigen
    ... und die "$"-Funktion hat, aufgerufen wird.
    Es gibt keine $-Funktion! Das ist genau mein Verständnisproblem.
    Die Funktion heisst "datepicker()".
     

  15. #15
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von FrankWST Beitrag anzeigen
    Es gibt keine $-Funktion! Das ist genau mein Verständnisproblem.
    Die Funktion heisst "datepicker()".
    Die Funktion $ gibt ein Objekt zurück, und dies zurückgegebene Objekt hat eine Methode namens datepicker:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    function $(selektor)
    {
      return {
                selektor:selektor,
                datepicker:function()
                           {
                            alert('Der Selektor ist '+this.selektor+
                                 '\n und ich bin die Methode datepicker()'
                                 );
                           }
             };
    }
     
    $('#irgendwas').datepicker();