2009-07-06 12 views
4

Ich versuche, Styling für alle Elemente mit einem Titel-Attribut anwenden. Aus irgendeinem Grund gibt dieser Code nur den ersten zurück, nicht alle. Ich vermisse wahrscheinlich etwas Offensichtliches ... Jede Hilfe wäre großartig, danke!jQuery [Attribut] Selektor nur das erste Element, nicht alle zurück

$("[title]").each(function() { 

    doSomething(this); 

} 
+0

Was machst du in deiner doSomething (this) -Funktion? –

+0

Dieser Wahlschalter funktioniert gut für mich! Tatsächlich gibt es in StackOverflow 66 Elemente zurück. Versuchen Sie dies in der Adressleiste: javascript: alert ($ ("[title]"). Length); –

Antwort

1

Es kann nur das TITLE-Element der Seite zurückgegeben werden. Versuchen:

$("*[title]").each(blah); 

EDIT: In einem Test, dies wird tun, was Sie wollen, aber so, was Sie tatsächlich hatte, so dass es etwas mit Ihrem HTML sein muss. Es wird darauf hingewiesen, hier ist was ich verwendet:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
        "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Blah</title> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 


    <script> 
    $(document).ready(function(){ 
    var titles = $('*[title]'); 
     alert(titles.length); 
    }); 
    </script> 
</head> 
<body> 
    <a title="blah" href="#">blah</a> 
    <a title="blah" href="#">blah</a> 
    <a title="blah" href="#">blah</a> 
    <a title="blah" href="#">blah</a> 
    <a title="blah" href="#">blah</a> 
</body> 
</html> 

Mit nur var Titel = $ ('[title]'); zurückgegeben 5 Elemente, wie es sein sollte.

2

Sie müssen Ihre jeweils schließen ();.

+0

+1 Ohne das Schließen); es bricht nur. – googletorp

+0

Das ist richtig, aber wenn er es tatsächlich so hatte, würde der Code nicht einmal laufen ... (er bekommt nur das erste Match) –

6

Ihr Code ist korrekt (abgesehen von der fehlenden ); Ich nehme an, ist nur ein Pasting-Fehler) und sollte funktionieren.

Der einzige Grund, warum es nicht funktionieren würde, ist, wenn Sie Ihren Code nicht um $ (Dokument) .ready gewickelt haben. Wenn Sie mit $ (document) nicht vertraut sind, ist es ein spezielles Ereignis, das jQuery auslöst, sobald die gesamte DOM-Struktur manipuliert werden kann. Wenn Sie Javascript oben auf Ihrer Seite haben, wird alles, was Sie außerhalb von $ (document) ausführen, von .ready gegen ein leeres DOM ausgeführt, da der Browser noch keine Zeit hatte, die Knoten zu erstellen. Also, wann immer Sie Elemente manipulieren wollen (besonders eine Abfrage, um alle die Elemente zu erhalten, die einen Titel haben), müssen Sie definitiv den Code um dieses besondere Ereignis setzen.

, dass im Auge behalten, habe ich versucht, den folgenden Code, der einen roten Rahmen um Elemente mit einem Titel setzen würde:

$(document).ready(function() { 
    $("[title]").each(function() { 
     $(this).css('border','1px solid red'); 
    }); 
}); 

Und es worked properly.

+0

+1 Gutes Beispiel mit URL. – racerror

1

Ein guter Tipp, zuerst zu versuchen, wenn seltsame Dinge mit Selektoren geschieht, ist zu überprüfen, das gerenderte Markup kann bei w3c validieren. Ohne eine gültige dom können Sie seltsame und wunderbare Dinge von jedem dom Scripting und Selektoren erwarten.

3

Ich bin gerade auf dieses Problem gestoßen. Könnte es sein, dass Sie eine alte Version der Bibliothek jquery.validate verwenden, die in this post identifiziert wurde?

Für mich, das Herunterladen & die latest version of the plugin Anwendung arbeitete

+0

Kaum gefunden, und Ihr Beitrag hat mein Problem gelöst, danke! – DennyFerra

1

Dies kann passieren, wenn Sie jQuery in einem Browser-Konsole Versuchen Sie es mit und jQuery wird nicht auf dieser Seite installiert.

Verwandte Themen