Здесь есть несколько веских причин: «цепочечность» - это основной диск, способность писать очень краткий код с помощью цепочек не должна вызывать ошибок, чтобы работать без всяких проблем, например:
$("#divMenuContainer:visible").hide("explode").add("#another").fadeIn();
Каждыйобъект в цепочке, даже если он не ссылается ни на один из элементов DOM, возможно, будет добавлен еще позже, или давайте возьмем другой пример:
$("#divMenuContainer:visible").live("click", function() { ... });
В этом случае нас не волнует ни один из элементов, найденных селектором,мы заботимся о самом селекторе.Вот еще одно:
$("#divMenuContainer:visible").find(".child").hide("explode").end().fadeOut();
Даже если нет детей, мы можем захотеть вернуться обратно в цепочку, продолжая использовать ссылку .prevObject
, чтобы вернуться вверх по цепочке.
Существуют десятки различных случаев, подобных этому, которые показывают преимущества библиотеки в том виде, в каком она есть.Что касается почему , из интервью Джона Резига , который является создателем jQuery, он утверждает, что именно так все и получилось.Он был настолько кратким, насколько он мог понять код, и модель цепочки - это то, что вышло из-под контроля, просто она также имеет много преимуществ, приведенный выше пример - лишь некоторые из них.
Чтобы быть ясным, я не говорю, что каждый атрибут цепочки - хороший, у него просто много плюсов.
Давайте возьмем эту страницу в качестве примера,что если бы у нас было что-то вроде этого:
$(".comment").click(replyToFunction);
Если потерпит неудачу, потому что еще нет комментариев?Ну, нет, не совсем, это ожидаемо, я бы не хотел ошибки здесь ... если элемент существует, сделайте это, если нет.Моя точка зрения, по крайней мере, по моему опыту, , а не , выдавая ошибку из-за пропущенного элемента, чрезвычайно полезнее, чем выбрасывание одного.
Селектор в вашем вопросе, #ID
селектор - это особый случай, когда вы ожидаете только один элемент, так что, возможно, вы могли бы поспорить, что он может там потерпеть неудачу ... но тогда это не будет соответствовать другим селекторам, и вы хотите, чтобы библиотека былапоследовательны.
С почти любым другим селектором вы ожидаете 0-много элементов, поэтому сбой, когда вы не найдете никаких элементов, будет значительно менее желательным в большинстве ситуаций, особенно в случаяхкак .live()
выше.