Wie finde ich Skriptelemente mit einem bestimmten Attributwert "Typ"?

8

Angenommen, das folgende Skript-Tag in einem zufälligen HTML-Dokument:

%Vor%

kann jemand erklären, warum der folgende Ausdruck nicht alle Elemente von script mit dem Wert store für ihr type -Attribut findet.

%Vor%

jQuery-Version: v1.7.2 Chrome-Version: 25.0.1364.172 (läuft unter Debian Squeeze)

    
0xC0DEGURU 07.06.2013, 12:22
quelle

7 Antworten

10

Ihr Selektor $('#target script[type="store"]') würde jedem Skript-Tag mit dem Typ store entsprechen, das ein Kind des Elements mit der ID target ist. Was ist nicht der Fall für Ihr Beispiel HTML.

Wenn Sie alle Script-Tags mit dem Typ store auswählen möchten, sollte Ihr Selektor etwa so aussehen: $('script[type="store"]') .

Wenn Sie nur das bestimmte Skript-Tag mit der ID target auswählen möchten, können Sie nur $('#target') verwenden. Sie müssen nicht genauer sein, da die ID für dieses Element eindeutig sein muss. Die Verwendung nur des ID-Selektors wäre ebenfalls effizienter, da jQuery dann das native document.getElementById() verwenden könnte, um Ihr Element auszuwählen (vielleicht eine Mikrooptimierung, aber immer noch ...)

    
Christofer Eliasson 07.06.2013, 12:27
quelle
6

Weil das, was du geschrieben hast bedeutet: Finde jedes script Element mit einem Attribut type , das gleich store ist und ein Nachfolger von #target (wegen des Leerzeichens)

Sie könnten etwas tun wie:

%Vor%

Dies ist jedoch unnötig, da eine ID bereits ein Element identifiziert - keine Elemente in einem Dokument können die gleiche ID teilen.

Wenn ich Ihre Beschreibung gut verstehe, brauchen Sie:

%Vor%

Noch eine Sache: Sie sollten dafür nicht das Attribut type verwenden. Es hat einen ganz bestimmten Zweck :

  

Das Attribut type gibt die Sprache des Skripts oder Formats des   Daten. Wenn das Attribut vorhanden ist, muss sein Wert ein gültiger MIME sein   Art. Der Parameter charset darf nicht angegeben werden. Der Standardwert, der   Wird verwendet, wenn das Attribut nicht vorhanden ist, ist "text / javascript".

Ich schlage also vor, dass Sie data-type anstelle von type verwenden.

    
kapa 07.06.2013 12:25
quelle
1

Du brauchst das -

%Vor%     
Mohammad Adil 07.06.2013 12:24
quelle
1

Sie müssen

tun %Vor%     
quelle
1

In diesem Selektor suchen Sie nach einem Skript-Tag mit type="store" innerhalb des Skript-Tags. Sie sollten versuchen:

%Vor%     
Daniel Dykszak 07.06.2013 12:27
quelle
1

Benutze dies

%Vor%     
pvnarula 07.06.2013 12:24
quelle
0

Kürzeste Erklärung möglich:

Sie versuchen, das untergeordnete Skript von #target zu targetieren.

Zum Beispiel, wenn Ihr Markup den Effekt von ... hatte

%Vor%

... Ihre jQuery Auswahl würde funktionieren.

Um ALLE Skriptelemente mit einem bestimmten Wert auszuwählen, tun Sie Folgendes:

%Vor%

Um ein bestimmtes Skript auszuwählen, das auch eine ID hat, tun Sie Folgendes:

%Vor%

Man kann auch das Skript, das gerade ausgeführt wird, ohne Identifikatoren targetieren:

%Vor%

Was Sie bei der Ausführung dieses Codes feststellen werden, ist, dass das erste Skript sich selbst anvisiert und an die Konsole ausgibt sowie das endgültige Skript im Dokument mit dem // The event will target me :( -Kommentar ansieht.

Der Grund dafür ist, dass außerhalb des Ereignisses das letzte dem DOM hinzuzufügende Element das Skript-Tag ist, das die Anweisungen ausführt, was logischerweise das letzte Skript-Tag in $('script') bedeutet.

Innerhalb des Ereignisses, in diesem Fall document.on('ready') , wird jedoch gewartet, bis das DOM vollständig geladen ist, so dass alle zusätzlichen Skript-Tags, die möglicherweise im Dokument vorhanden sind, geladen werden und das gewünschte .last() target.     

RedYetiCo 03.11.2015 15:25
quelle