Методы JQuery и свойства DOM - PullRequest
12 голосов
/ 17 февраля 2009

Я не совсем понимаю, когда я могу использовать свойства DOM и когда я могу использовать методы Jquery для объекта Jquery. Скажем, я использую селектор

var $elemSel = $('#myDiv').find('[id *= \'select\']')

На данный момент $ elemSel - это объект jquery, который, как я понимаю, является оболочкой для массива элементов DOM. Я мог бы получить ссылку на элементы DOM, просматривая объект / массив $ elemSel (Correct?)

Мои вопросы: 1. Есть ли способ преобразовать этот $ elemSel в не JQuery регулярный массив элементов DOM? 2. Могу ли я комбинировать свойства DOM и методы JQuery одновременно (как-то так)

$elemSel.children('td').nodeName

(имя узла связано с DOM, потомки связаны с JQuery)

РЕДАКТИРОВАТЬ: Что не так с этим?

$elemSel.get(0).is(':checked')

РЕДАКТИРОВАТЬ 2:

Спасибо за ответы. Теперь я понимаю, что могу использовать get (0) для получения элемента DOM. Дополнительные вопросы:

  1. Как мне преобразовать элемент DOM в объект JQuery?

  2. Если я назначу переменную this, будет ли это новая переменная DOM или JQuery? Если это JQuery, как я могу преобразовать это в элемент DOM? (Так как я не могу использовать get (0))

    var $ elemTd = $ (this);

  3. Когда я выполняю присваивание, подобное приведенному выше, я видел, что некоторые примеры кода не включают знак $ для имени переменной. Почему?

  4. А что касается моего первоначального вопроса, могу ли я одновременно объединить свойства DOM и функции JQuery в объекте JQuery?

    $ elemSel.children ( 'тд'). NODENAME

Ответы [ 4 ]

24 голосов
/ 17 февраля 2009

Вам понадобится .get (0) результат, чтобы получить DOM-ready объект.

var myBox = $("div#myBox");
alert(myBox.get(0).id); // "myBox"

Прочитайте " Снятие упаковщика jQuery и поиск массива " Коди Линдли


Re: Edit: .is() не является родным методом javascript. Когда вы запускаете .get(0), вы больше не работаете с объектом jQuery, поэтому вы не можете ожидать запуска методов jQuery из него.

Если вы хотите запустить .is() для определенного результата, используйте :eq(index) selector или .eq(index) method:

$("div:eq(1)").is(":checked"); // gets second div
$("div").eq(1).is(":checked"); // gets second div

Re: Edit # 2

Боб, ты действительно должен создать новый вопросы, а не задавать больше и больше здесь.

Преобразование элемента dom в объект jquery выполняется путем передачи его в селектор:

var myBox = document.createElement("div");
var myBoxJQ = $(myBox);

Присваивание This переменной. Зависит от того, когда вы это сделаете. Если под «этим» вы ссылаетесь на объект jQuery, то this будет объектом jQuery. Вы можете преобразовать его, выполнив this с .get(0).

Когда this ссылается на объект jQuery, вам не нужно заключать его в $ (). Это избыточно.

И, наконец, $elemSel.children('td').nodeName можно сделать так: $elemSel.children('td')[0].nodeName или $elemSel.children('td').get(0).nodeName, где 0 - это индекс элемента, к которому необходимо получить доступ.

2 голосов
/ 17 февраля 2009

Существует также ярлык для функции get (index):

$(selector)[0].nodeName

Soruce: http://docs.jquery.com/Core/get#index

1 голос
/ 17 февраля 2009

Поскольку в селекторах jQuery может быть несколько совпадений, необходимо вывести элементы из «массива».

Вы можете использовать метод get для возврата одного элемента DOM или массива или элементов DOM.

например:

var elims = $("div").get();
for(var i in elims)
    alert(elims[i].nodeName);

Edit:

$elemSel.get(0).is(':checked') не будет работать, потому что вы получаете объект Dom, а затем пытаетесь использовать на нем функции jQuery. Если вы хотите получить один элемент jQuery, используйте eq .

$elemSel.eq(0).is(':checked');
0 голосов
/ 14 июня 2010

Для вызова нативного метода DOM вы можете использовать get (index). Или, если вы хотите использовать метод объекта jQuery, вам следует обернуть нативный элемент DOM с помощью jQuery, который преобразует элемент DOM в объект jQuery, чтобы все методы были доступны. http://www.linxinshan.com/?p=339

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...