Der einfache jQuery-Selektor wählt nur das erste Element in Chrome aus.

Lesezeit: 6 Minuten

Benutzer-Avatar
fbonetti

Ich bin ein bisschen neu in jQuery, also vergib mir, dass ich dicht bin. Ich möchte alle auswählen <td> Elemente auf einer bestimmten Seite über die JS-Konsole von Chrome:

$('td')

Wenn ich dies mache, erhalte ich jedoch die folgende Ausgabe:

<td>Apples</td>

Soll jQuery nicht ein Array von Elementen mit dem zurückgeben <td> Schild? Warum sehe ich nur das erste Element, das diesen Kriterien entspricht?

Hier die betreffende Seite: http://www.w3schools.com/html/html_tables.asp

BEARBEITEN: Ich möchte hinzufügen, dass ich KEIN jQuery-Objekt zurückbekomme, wenn ich eine jQuery-Funktion in die Chrome-Konsole eingebe. Ich bekomme ein einfaches HTML-Element. Irgendetwas muss mit der Art und Weise, wie mein Chrome eingerichtet/konfiguriert ist, nicht stimmen.

  • Es selektiert tatsächlich jedes Element. Elementselektor

    – Hochfallen

    13. Januar 2013 um 21:53 Uhr

Benutzer-Avatar
Gras doppelt

Wenn jQuery nicht auf der Webseite vorhanden ist und natürlich kein anderer Code etwas zuweist $weist die JS-Konsole von Chrome zu $ eine Abkürzung zu document.querySelector().

Du kannst damit erreichen, was du willst $$()dem von der Konsole eine Verknüpfung zugewiesen wird document.querySelectorAll().

Um zu wissen, ob die Seite jQuery enthält, können Sie ausführen jQuery in der Konsole. Um zu wissen, ob jQuery zugewiesen ist $können Sie ausführen $().jquery Dies gibt die jQuery-Version zurück, wenn dies der Fall ist.

Außerdem gibt es Browser-Add-Ons, um jQuery in jede Webseite einzufügen.

  • Kleine Korrektur: $ ist KEIN Alias ​​für document.getElementById – Es ist ein Alias ​​für document.querySelector. developer.google.com/web/tools/chrome-devtools/console/…

    – fbonetti

    28. März 2017 um 15:58 Uhr

  • Diese Korrektur ist definitiv keine Kleinigkeit 🙂 Tatsächlich wurde das Verhalten geändert. Mit ein bisschen googeln bin ich fündig geworden WebKit-Ticket 92648. Danke für den Hinweis auf diese Änderung.

    – Grasdoppelt

    28. März 2017 um 22:48 Uhr


  • Wenn Sie an jedem operieren möchten, können Sie dies tun [].forEach.call($$(".ClassName"), function(fe){ fe.click();})

    – Markieren

    10. Mai 2021 um 11:42 Uhr


Benutzer-Avatar
rdonatoiop

Es scheint, dass jQuery nicht richtig enthalten ist, um auf Ihrer Zielseite ausgeführt zu werden. Ich hatte ein ähnliches Problem und habe es für Google Chrome wie folgt gelöst.

Fügen Sie Ihrem Chrome-Browser ein Lesezeichen hinzu, das den folgenden Einzeiler-Code als URL-Feld enthält (zur besseren Lesbarkeit verschönert):

javascript: (function () {
    var s = document.createElement('script');
    s.setAttribute('src', 'https://code.jquery.com/jquery-latest.min.js');
    if (typeof jQuery == 'undefined') {
        document.getElementsByTagName('head')[0].appendChild(s);
    }
    jQuery("td.edit select option[value=BN]").attr("selected", "");
})();

Klicken Sie dann einfach auf dieses Lesezeichen, um es auszuführen. Es wird erwartet, jQuery normal einzuschließen und die Konsole so etwas wie zurückzugeben function (e,t){return new b.fn.init(e,t,r)} während Sie eingeben $.

Der Prozess zum Erstellen des Lesezeichens (auch Bookmarklet genannt) ist eine Abkürzung für das Einfügen von jQuery in jede Seite, an der Sie mit der Konsole arbeiten möchten. Der Snippet-Code funktioniert jedoch auch, wenn Sie ihn direkt in die JS-Konsole kopieren und einfügen.

PS: Credits für das Snippet sind nicht von mir, da ich es eine Weile benutze und mich nicht erinnern kann, woher ich das habe.

Ich hoffe es hilft.

  • Wie kann ich den Code als URL behalten? In dem Moment, in dem ich die Eingabetaste drücke, wird es von Google durchsucht (ich habe die Omni-Leiste auf die Google-Suche eingestellt).

    – Akki

    8. Mai 2014 um 10:59 Uhr

  • Bei Verwendung von Chrome wird in dem Moment, in dem das Snippet in die Adressleiste eingegeben wird, der „javascript:“-Teil am Anfang der Zeichenfolge seltsamerweise weggelassen und der Befehl als Suchbegriff interpretiert. Ich habe es mit Firefox getestet, aber das passiert nicht. Stellen Sie sicher, dass Sie „javascript:“ vor der Funktionsdeklaration eingeben, wenn Sie das Snippet direkt in der Adressleiste verwenden.

    – rdonatoiop

    8. Mai 2014 um 12:10 Uhr


  • Ja, das passiert auch bei mir … Ich habe das ‘Javascript:’ zwar manuell hinzugefügt, aber beim Drücken der Eingabetaste passiert immer noch nichts, die Seite wird neu geladen oder so … es gibt nichts, was ich mit einem Lesezeichen versehen kann

    – Akki

    8. Mai 2014 um 12:21 Uhr

  • Das Lesezeichen ist eine Abkürzung zum Speichern der URL für die spätere Verwendung, wenn Sie jquery lokal in eine bestimmte Webseite einfügen müssen, die Sie anzeigen, falls sie noch nicht geladen wurde. Nachdem Sie das Snippet ausgeführt haben (entweder durch Klicken auf Ihren Lesezeichencode, durch Eingeben in die Adressleiste oder sogar in die Konsole), wird erwartet, dass jquery geladen wird, damit Sie mit der Browserkonsole herumspielen können. Mit der Seite passiert (in Bezug auf Anfragen) nicht wirklich etwas, da es sich um eine einfache dynamische Einbindung der jquery-Bibliothek handelt. Ich hoffe es hilft.

    – rdonatoiop

    8. Mai 2014 um 13:20 Uhr

Benutzer-Avatar
jfriend00

Wenn jQuery installiert ist und die $ Symbol ist dann eine Abkürzung für jQuery $('td') gibt ein jQuery-Objekt zurück. Aber auf der von Ihnen verlinkten w3schools-Seite sehe ich nicht, dass jQuery überhaupt vorhanden ist.

Wenn jQuery vorhanden war und der Debugger die nicht überschrieben hat $ Symbol, dann $('td') würde ein jQuery-Objekt zurückgeben. Das jQuery-Objekt ist ein Array-ähnliches Objekt (hat einige Eigenschaften eines Arrays), aber es ist kein tatsächliches Array. Wenn Sie sich Dinge in der Konsole ansehen, müssen Sie sicherstellen, dass Sie die DOM-Elemente selbst betrachten, nicht das enthaltende jQuery-Objekt.

Wenn Sie ein tatsächliches Array von DOM-Elementen erhalten möchten, können Sie Folgendes tun:

$('td').get();

die ein Array von DOM-Elementen zurückgibt.

Wenn das nicht funktioniert, sollten Sie den Zeitpunkt Ihres Anrufs bei überprüfen $('td').get() um sicherzustellen, dass alle td die gewünschten Elemente auf der Seite angezeigt werden, bevor Sie danach suchen.

  • Vielleicht liegt das Problem an meiner Chrome-Konfiguration? Wenn ich tippe $('td') Ich bekomme kein jQuery-Objekt zurück … Ich bekomme nur ein einfaches HTML-Element. Ebenso beim Tippen $('td').get() Ich bekomme die Fehlermeldung TypeError: Object #<HTMLTableCellElement> has no method 'get'

    – fbonetti

    13. Januar 2013 um 21:55 Uhr

  • @effbott – es kann sein, dass der Chrome-Debugger überschrieben hat $ als Debugging-Shortcut. Versuchen Sie es mit jQuery('td').

    – jfriend00

    13. Januar 2013 um 21:56 Uhr


  • jfriend00, das klingt ungefähr richtig. Wenn ich tippe jQuery('td') In der Konsole bekomme ich die Fehlermeldung ReferenceError: jQuery is not defined. Vielleicht sollte ich Chrome einfach neu installieren? Ich hatte dieses Problem nicht immer.

    – fbonetti

    13. Januar 2013 um 22:01 Uhr

  • @effbott – Die w3schools-Seite, die Sie verlinkt haben scheint jQuery nicht darauf installiert zu haben. Daher können Sie jQuery auf dieser Seite nicht verwenden.

    – jfriend00

    13. Januar 2013 um 22:14 Uhr


  • “In diesem Objekt ist ein Array von DOM-IDs” – Es ist ein Array (ähnliches Objekt) von DOM Elemente, nicht Dom ids. (Wie Sie sicher wissen.)

    – nnnnn

    13. Januar 2013 um 22:17 Uhr

Auch wenn Sie versuchen, etwas mit jedem der tds zu tun, müssten Sie a verwenden .each() sie durchzuschleifen. Zum Beispiel:

$('td').each(function() {
   //do something relevant here
});

1299540cookie-checkDer einfache jQuery-Selektor wählt nur das erste Element in Chrome aus.

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy