Hier gibt es einige gute Gründe: "Verkettbarkeit" ist der Hauptantrieb. Die Fähigkeit, sehr knappen Code durch Verketten zu schreiben, muss keine Fehler verursachen, um scheinbar reibungslos zu funktionieren, zum Beispiel:
$("#divMenuContainer:visible").hide("explode").add("#another").fadeIn();
Jedes Objekt in der Kette, auch wenn es auf keine DOM-Elemente verweist, wurde möglicherweise später hinzugefügt, oder nehmen wir ein anderes Beispiel:
$("#divMenuContainer:visible").live("click", function() { ... });
In diesem Fall kümmern wir uns nicht um die Elemente, die der Selektor gefunden hat, sondern um den Selektor selbst. Hier ist ein anderes:
$("#divMenuContainer:visible").find(".child").hide("explode").end().fadeOut();
Selbst wenn es keine Kinder gibt, möchten wir möglicherweise später wieder in die Kette springen und weiterhin die .prevObject
Referenz verwenden, um die Kette wieder hochzufahren.
Es gibt Dutzende solcher Fälle, die zeigen, dass die Bibliothek so ist, wie sie ist. Wie für die warum , aus Interviews von John Resig , der der Schöpfer von jQuery ist, stellt er fest, dass das nur , wie es funktioniert. Er war nach Code so knapp wie möglich, und das Verkettungsmodell ist das, was aus dem Hut kam. Es hat zufällig auch viele Vorteile, das obige Beispiel sind nur einige davon.
Um es klar auszudrücken , ich sage nicht, dass jedes Attribut der Verkettung gut ist, es gibt nur viele Vorteile.
Nehmen wir diese Seite als Beispiel. Was wäre, wenn wir so etwas hätten:
$(".comment").click(replyToFunction);
Sollte das fehlschlagen, weil es noch keine Kommentare gibt? Nun, nein, nicht wirklich, das wird erwartet, ich würde hier keinen Fehler wollen ... wenn das Element existiert, mach es, wenn nicht. Mein Punkt ist, zumindest meiner Erfahrung nach, dass es enorm nützlicher ist , keinen Fehler wegen eines fehlenden Elements zu werfen, als einen zu werfen.
Der Selektor in Ihrer Frage, der #ID
Selektor, ist ein ganz besonderer Fall, in dem Sie nur ein einziges Element erwarten. Vielleicht könnten Sie also argumentieren, dass es dort fehlschlagen sollte ... aber dann wäre das nicht mit anderen Selektoren vereinbar, und Sie möchten eine Bibliothek konsequent sein.
Bei so ziemlich jedem anderen Selektor erwarten Sie 0-viele Elemente. Wenn Sie also keine Elemente finden, ist ein Fehlschlagen in den meisten Situationen erheblich weniger wünschenswert, insbesondere in den .live()
oben genannten Fällen .