Подтвердить что ты не робот

Методы JQuery и свойства DOM

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

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

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

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

$elemSel.children('td').nodeName

(nodeName связан с DOM, дети связаны с JQuery)

EDIT: Что случилось с этим?

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

ИЗМЕНИТЬ 2:

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

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

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

    var $elemTd = $(this);

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

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

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

4b9b3361

Ответ 1

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

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

Прочитайте " Пилинг от JQuery Wrapper и Поиск массива" Коди Линдли


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 переменной. Зависит от того, когда вы это делаете. Если в "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 - индекс, для которого элемент доступа.

Ответ 3

Поскольку в селекторах 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');

Ответ 4

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