Ответ 1
Это называется chaining и помогает вам создать свободно интерфейс. Каждая функция возвращает ссылку на текущий экземпляр jQuery, поэтому вы можете связать вызовы вместе.
Сначала вы создаете экземпляр jQuery с помощью $('.element')
, который возвращает insance объекта jQuery; он по существу похож на конструктор. Затем каждая функция-член объекта jQuery
возвращает ссылку на this
, которая в основном является экземпляром для этой функции. Поэтому вместо этого:
var jQueryObj = $(".element");
jQueryObj.fadeOut();
jQueryObj.delay(500);
jQueryObj.fadeIn();
Вы можете сделать все это в одной строке, потому что каждая функция выглядит более или менее (это очень простой пример):
function fadeOut() {
//jQuery code
//...
return this;
}
Важно отметить, что не все функции jQuery являются цепями; некоторые не возвращают ссылку на экземпляр jQuery, и поэтому вы не можете их связать. Примеры включают .html()
, .text()
и .val()
. Они возвращают фактический контент, который вы хотите (например, HTML, текст или значение элемента ввода). В этих случаях нецелесообразно цепочки.
Вот очень простой пример, показывающий, как работает цепочка:
var Starship = function() {
this.name = "USS Enterprise";
this.registry = "NCC-1701";
this.shipClass = "Constitution";
};
Starship.prototype.name = function(name) {
this.name = name;
return this;
};
Starship.prototype.registry = function(registry) {
this.registry = registry;
return this;
}
Starship.prototype.shipClass = function(shipClass) {
this.shipClass = shipClass;
return this;
}
Starship.prototype.print = function() {
console.log(this.name + " " + this. registry + " " + this.shipClass);
}
Теперь вы можете создать такой экземпляр:
var starship = new Starship()
.name("USS Enterprise")
.registry("NCC-1701-E")
.shipClass("Sovereign");
Затем вы также можете вызвать starship.print()
, но обратите внимание, что он не возвращает this
, что означает, что после этого вы не можете ничего связать.
Документация jQuery перейдет к тому, какие методы являются целыми, а какие нет. Если в документации указано, что функция возвращает jQuery
, тогда она является цепной; иначе это не так. Также обратите внимание, что некоторые методы могут быть связаны в зависимости от того, какие параметры переданы. Например, функция .attr
, которая позволяет вам устанавливать атрибут, привязывается только при установке атрибута через .attr(attrName, attrValue)
. Когда вы отправляете только один аргумент (.attr(attrName)
), он возвращает значение атрибута и, следовательно, не связывается с цепочкой.