Какая разница между .clone() и .html()?
В чем разница между функциями JQuery.clone() и .html()?
Документация Jquery гласит:
Метод .clone() выполняет глубокую копию набора совпадающих элементов, что означает, что он копирует согласованные элементы, а также все их потомков и текстовых узлов.
В HTML-документе .html() можно использовать для получения содержимого любого элемент. Если выражение селектора соответствует нескольким элементам, только в первом матче будет возвращен HTML-контент.
Мне кажется, что они взаимозаменяемы, так есть ли конкретная ситуация, когда кто-то будет использовать другой?
Ответы
Ответ 1
.clone()
возвращает объект jQuery, а .html()
возвращает строку.
Используйте .clone()
, если вы хотите скопировать объекты jQuery и используйте .html()
, чтобы получить внутренний HTML-объект jQuery в строковом формате. Каждый метод имеет свою собственную цель (и стоимость).
Кроме того, как отметил sgroves, ".clone()
выполняет глубокую копию набора элементов, найденных селектором, а .html()
только [использует] первый сопоставленный элемент." *
* Обратите внимание, что .html(newContent)
установит внутренний HTML set совпадающих элементов. Fiddle
Другое примечание: опция (как правило) "быстрее" заключается в использовании строк, а не объектов jQuery при выполнении манипуляций с DOM (JSPerf). Таким образом, я бы рекомендовал .html()
, если вам нужно только текстовое содержимое. Опять же: каждый метод имеет свою собственную цель.
Ответ 2
Вот список различий:
-
.clone
может использоваться для нескольких выбранных элементов, а .html()
возвращает только html первого элемента.
-
.clone
возвращает объект jQuery, а .html
возвращает строку.
-
.clone
может (если указано) сохранять событие и данные элемента DOM. .html
не будет.
-
.clone
делает копию выбранного элемента и всех его потомков, в то время как .html
получает только его потомки. Другими словами, по сравнению с методами DOM, .clone
похож на .outerHTML и .html
больше похож на .innerHTML.
Ответ 3
Метод clone() скопирует данные и события, связанные с копируемыми элементами DOM, этот метод возвращает объект jQuery для цели. html() - это просто строковое представление DOM, что означает, что ни одно из событий/данных, связанных с этой частью DOM, не будет скопировано, этот метод возвращает только строку.
Изменить # 2
Убрал мои комментарии о том, что clone() работает так же быстро, как html(), но на самом деле он медленнее. Примеры можно увидеть ниже в комментариях Кейси Фалька.
Ответ 4
из цитируемых предложений, которые вы разместили выше ответа, есть:
.clone()
он копирует согласованные элементы, а также все их дочерние элементы и текстовые узлы. означает, что он выбирает все элементы в селекторе.
while .html()
он выбирает только первый элемент.