JQuery ruft alle Elemente nach Klassennamen ab

Lesezeit: 4 Minuten

Benutzer-Avatar
Jake

Beim Lernen von Javascript und Jquery bin ich durch Seiten von Google gegangen, kann das aber anscheinend nicht zum Laufen bringen. Grundsätzlich versuche ich, inneres HTML von Klassen zu sammeln, Jquery scheint als einfaches Javascript vorgeschlagen zu werden, in einer document.write.

Hier ist der bisherige Code;

<div class="mbox">Block One</div>
<div class="mbox">Block Two</div>
<div class="mbox">Block Three</div>
<div class="mbox">Block Four</div>

<script>
var mvar = $('.mbox').html();
document.write(mvar);
</script>

Damit wird nur die erste Klasse unter document.write angezeigt. Wie kann ich alles zusammen zeigen wie Block OneBlock TwoBlock Three? Mein ultimatives Ziel dabei ist es, sie durch Kommas getrennt zu zeigen, wie Block Eins, Block Zwei, Block Drei, Block Vier. Danke, es tauchen viele relevante Fragen auf, aber keine scheint so einfach zu sein.

  • verwenden document.write ist nicht zu empfehlen.

    – Arash Milani

    19. Mai 2013 um 0:09 Uhr

Ein möglicher Weg ist die Verwendung .map() Methode:

var all = $(".mbox").map(function() {
    return this.innerHTML;
}).get();

console.log(all.join());

DEMO: http://jsfiddle.net/Y4bHh/

NB Bitte nicht verwenden document.write. Zu Testzwecken console.log ist der beste Weg zu gehen.

  • Das funktioniert definitiv, aber wozu dient der Funktionsaufruf “get()” nach map() ?

    – Roneo

    13. Mai 2020 um 17:35 Uhr

  • @roneo Es gibt ein einfaches JS-Array und kein Array-ähnliches Objekt zurück, von dem jQuery zurückgibt map.

    – Vision

    14. Mai 2020 um 9:15 Uhr

  • Können Sie das näher erläutern? Ich habe versucht, nach einer Antwort zu suchen, konnte aber keine befriedigende finden. Was ist ein Array-ähnliches Objekt? Gilt die Funktion “get()” für jede Iteration?

    – Roneo

    14. Mai 2020 um 12:50 Uhr

  • @roneo Überzeugen Sie sich selbst: jsfiddle.net/b5vpmyh4. Andernfalls, jQuery-Dokumente sagen es ausdrücklich: Da der Rückgabewert ein jQuery-Objekt ist, das ein Array enthält, wird es sehr häufig aufgerufen .get() auf das Ergebnis, um mit einem einfachen Array zu arbeiten.

    – Vision

    15. Mai 2020 um 12:56 Uhr

  • @AndrewAnderson this bezieht sich auf das aktuelle DOM-Element für jede Iteration. Die Pfeilfunktion behält also den Bindungskontext nicht bei this ist dort nicht verfügbar. Du kannst den … benutzen zweiter Callback-Parameter stattdessen: var all = $('h3').map((_, element) => element.innerHTML).get().

    – Vision

    4. Oktober 2021 um 13:26 Uhr

Vielleicht nicht so sauber oder effizient wie die bereits geposteten Lösungen, aber wie wäre es mit der Funktion .each()? Z.B:

var mvar = "";
$(".mbox").each(function() {
    console.log($(this).html());
    mvar += $(this).html();
});
console.log(mvar);

  • Ich würde sagen, dies ist die kanonische Antwort (und der erwartete Anwendungsfall von each)

    – Samveen

    7. September 2015 um 7:24 Uhr


Benutzer-Avatar
Rufin

Mit dem Code in der Frage sind Sie nur Umgang mit der Interaktion mit dem ersten des vier Einträge von diesem Selektor zurückgegeben.

Code unten als Geige: https://jsfiddle.net/c4nhpqgb/

Ich möchte das überdeutlich machen Sie haben vier Elemente, die mit diesem Selektor übereinstimmen, also müssen Sie sich mit jedem explizit befassen. Verwenden eq() macht diesen Punkt etwas deutlicher als die Antworten mit mapobwohl map oder each ist das, was Sie wahrscheinlich “im wirklichen Leben” verwenden würden (jquery-Dokumente für eq hier).

<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>
    </head>

    <body>
        <div class="mbox">Block One</div>
        <div class="mbox">Block Two</div>
        <div class="mbox">Block Three</div>
        <div class="mbox">Block Four</div>

        <div id="outige"></div>
        <script>
            // using the $ prefix to use the "jQuery wrapped var" convention
            var i, $mvar = $('.mbox');

            // convenience method to display unprocessed html on the same page
            function logit( string )
            {
                var text = document.createTextNode( string );
                $('#outige').append(text);
                $('#outige').append("<br>");
            }

            logit($mvar.length);

            for (i=0; i<$mvar.length; i++)    {
                logit($mvar.eq(i).html());
            }
        </script>
    </body>

</html>

Ausgabe von logit Anrufe (nach den ersten vier divAnzeige von ):

4
Block One
Block Two
Block Three
Block Four

Alternative Lösung (Sie können createElement durch ein eigenes Element ersetzen)

var mvar = $('.mbox').wrapAll(document.createElement('div')).closest('div').text();
console.log(mvar);

Um den Eingabewert zu erhalten, können Sie Folgendes tun:

 var allvendorsList = $('.vendors').map(function () {
            return this.value;
        }).get();

1130190cookie-checkJQuery ruft alle Elemente nach Klassennamen ab

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

Privacy policy