getElementById и JQuery не возвращают одинаковый результат - PullRequest
0 голосов
/ 11 июля 2011

Я не получаю тот же результат, когда использую функции JQuery против javascript.

Это HTML

<form id="testform">
  <div id="FormContainerID"></div>
  <input type="button" id="y" value="Button" />
  <div id="ListContainerID"></div>
</form>

Вот Javascript

01   var Form = document.getElementById('y').form;
02 //var Form = $('#y').closest('form');
03   alert(Form);

При активации строки 1 я получаю объект юридической формы.Оповещение говорит «объект HTMLFormElement», и все работает нормально.

Но если я вместо этого использую строку 02, Оповещение говорит «объектный объект», а затем я получаю ошибки, потому что это не настоящий объект формы.

Почему JQuery не возвращает правильный объект?Я получаю тот же результат с Chrome и IE8.

[EDIT]
Я использую версию JQuery: jquery-1.5.1.min

[РЕШЕНИЕ]
Спасибо за разъяснение.Я изменил код на:

var Form = $('#'+fChildID).closest('form')[0];

... и теперь он работает как заклинание.
Вивек Гоэль был первым, кто ответил, так что кредиты ему.Я проголосовал за вас, ребята, которые объяснили модель экземпляра JQuery.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 11 июля 2011

jQuery возвращает экземпляр jQuery, когда вы используете его для поиска, а не элемент DOM.Экземпляр jQuery является оболочкой для набора соответствующих элементов и позволяет применять к элементам операции на основе набора.Это одна из абсолютных основ использования jQuery.

Вы также можете получить доступ к необработанным элементам, если хотите использовать массивоподобную нотацию - [0], [1] и т. Д. До .length - 1.Так что в вашем случае, поскольку вы получаете только один элемент, это будет Form[0].Если ваш код соответствует нескольким элементам формы, для второго будет Form[1], для третьего - Form[2] и т. Д. (Использование нотации [] на удивление трудно найти в документации, хотя один изпробелы, на мой взгляд, в старые времена вы использовали метод get, но он нужен вам сейчас, только если вы используете его специальную обработку для отрицательных индексов.)

Вам часто не требуется доступсырые элементы на всех.Вы не сказали, что вы будете делать с формой, как только получите ее, но если вы (скажем) отправили ее, просто вызовите функцию submit в экземпляре jQuery, и она отправитформа.Если вы хотите получить от него атрибут, есть функция attr jQuery (например, val = Form.attr("action")).

jQuery очень основан на множествах, но он асимметричный, что на первый взгляд кажется странным, ноработает довольно хорошо на практике.Когда получает значение, функции обычно получают значение только из первого соответствующего элемента.Когда устанавливает значение, функции обычно устанавливают его на все соответствующих элементов.

2 голосов
/ 11 июля 2011

Это потому, что оператор jquery возвращает объект jquery, а не объект формы.Вам нужно что-то вроде Form [0] для доступа к элементу формы.

1 голос
/ 11 июля 2011

с использованием jquery

 alert(Form[0]);

http://jsfiddle.net/dvCtr/

0 голосов
/ 11 июля 2011

Попробуйте

var form = $ ("# y"). Parent

это должно вернуть родителя y в дереве DOM

...