Я хотел бы понять взаимосвязь между объектом jQuery и элементом DOM ..
Когда jQuery возвращает элемент, он отображается как [object Object]
предупреждение. Когда getElementByID
возвращает элемент, он отображается как [object HTMLDivElement]
. Что именно это значит? Я имею в виду, есть ли разница между ними обоими?
Также какие методы могут работать с объектом jQuery и элементом DOM? Может ли один объект jQuery представлять несколько элементов DOM?
javascript
dom
jquery
testndtv
источник
источник
Ответы:
Объект jQuery - это объект, подобный массиву, который содержит элемент (ы) DOM. Объект jQuery может содержать несколько элементов DOM в зависимости от используемого селектора.
Функции jQuery (полный список находится на веб-сайте) работают с объектами jQuery, а не с элементами DOM. Вы можете получить доступ к элементам DOM внутри функции jQuery, используя
.get()
или напрямую обращаясь к элементу по желаемому индексу:$("selector")[0] // Accesses the first DOM element in this jQuery object $("selector").get(0) // Equivalent to the code above $("selector").get() // Retrieve a true array of DOM elements matched by this selector
Другими словами, следующее должно дать вам тот же результат:
<div id="foo"></div> alert($("#foo")[0]); alert($("#foo").get(0)); alert(document.getElementById("foo"));
Дополнительные сведения об объекте jQuery см. В документации . Также ознакомьтесь с документацией для
.get()
источник
Когда вы используете jQuery для получения элемента DOM, возвращаемый объект jQuery содержит ссылку на элемент. Когда вы используете встроенную функцию, например
getElementById
, вы получаете ссылку на элемент напрямую, а не в объекте jQuery.Объект jQuery - это объект, подобный массиву, который может содержать несколько элементов DOM:
var jQueryCollection = $("div"); //Contains all div elements in DOM
Вышеупомянутая строка могла быть выполнена без jQuery:
var normalCollection = document.getElementsByTagName("div");
Фактически, это именно то, что jQuery будет делать внутренне, когда вы передадите простой селектор, например
div
. Вы можете получить доступ к фактическим элементам в коллекции jQuery, используяget
метод:var div1 = jQueryCollection.get(0); //Gets the first element in the collection
Когда у вас есть элемент или набор элементов внутри объекта jQuery, вы можете использовать любой из методов, доступных в jQuery API, тогда как когда у вас есть необработанный элемент, вы можете использовать только собственные методы JavaScript.
источник
В прошлом месяце я едва начал играть с jQuery, и у меня в голове возник аналогичный вопрос. Все ответы, которые вы получили до сих пор, действительны и точны, но очень точный ответ может быть таким:
Допустим, вы находитесь в функции, и для ссылки на вызывающий элемент вы можете использовать
this
, или$(this)
; а в чем разница? Оказывается, когда вы используете$(this)
, вы обертываетеthis
объект jQuery. Преимущество состоит в том, что, когда объект является объектом jQuery, вы можете использовать для него все функции jQuery.Это очень мощный, так как вы можете даже обернуть строковое представление элементов,
var s = '<div>hello <a href='#'>world</a></div><span>!</span>'
внутри объекта JQuery просто буквально окружив его в $ ():$(s)
. Теперь вы можете управлять всеми этими элементами с помощью jQuery.источник
Большинство членов jQuery
Functions
не имеют возвращаемого значения, а скорее возвращают текущееjQuery Object
или другоеjQuery Object
.Так,
console.log("(!!) jquery >> " + $("#id") ) ;
вернусь
[object Object]
, т.е.jQuery Object
который поддерживает коллекцию , которая является результатом вычисления селектораString
("#id"
) противDocument
,в то время как ,
console.log("(!!) getElementById >> " + document.getElementById("id") ) ;
вернет
[object HTMLDivElement]
(или фактически[object Object]
в IE), потому что / если возвращаемое значение -div
Element
.(1) В
Function
jQuery есть множество членов, которые относятся к DOMObject
. Лучшее, что можно сделать, это выполнить поиск в документации API jQuery,Function
если у вас есть конкретная задача (например, выборNode
s или управление ими).(2) Да, один
jQuery Object
может поддерживать список из нескольких DOMElement
. Есть несколькоFunctions
(например,jQuery.find
илиjQuery.each
), которые основаны на этом автоматическом кэшировании.источник
[object Object]
все равно былоdiv
Element
бы. Если выбрать с помощью jQuery, это будет файлjQuery Object
.Просто ваш браузер умен. Они оба являются объектами, но DOMElements - это особые объекты. jQuery просто оборачивает DOMElements в объект Javascript.
Если вы хотите получить больше отладочной информации, я рекомендую вам взглянуть на инструменты отладки, такие как Firebug для Firefox и встроенный инспектор Chrome (очень похожий на Firebug).
источник
Помимо упомянутого, я хотел бы добавить кое-что о том, почему объект jQuery импортируется согласно описанию из объекта jquery.
Например, набор
innerHTML
элементов может не работать в большинстве версий Internet Explorer.Вы можете установить innerHTML способом jQuery, и jQuery поможет вам скрыть различия браузера.
// Setting the inner HTML with jQuery. var target = document.getElementById( "target" ); $( target ).html( "<td>Hello <b>World</b>!</td>" );
jQuery предоставляет список методов, привязанных к объекту jQuery, для облегчения работы разработчика, пожалуйста, проверьте некоторые из них на http://api.jquery.com/ . Веб-сайт также предоставляет общие манипуляции с DOM, давайте посмотрим, как вставить элемент, хранящийся
newElement
послеtarget
элемента, обоими способами.Способ DOM,
// Inserting a new element after another with the native DOM API. var target = document.getElementById( "target" ); var newElement = document.createElement( "div" ); target.parentNode.insertBefore( newElement, target.nextSibling );
Способ jQuery,
// Inserting a new element after another with jQuery. var target = document.getElementById( "target" ); var newElement = document.createElement( "div" ); $( target ).after( newElement );
Надеюсь, это дополнение.
источник