Методы 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
Ответы
Ответ 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 - индекс, для которого элемент доступа.
Ответ 2
Существует также ярлык для функции get (index):
$(selector)[0].nodeName
Сорвали: http://docs.jquery.com/Core/get#index
Ответ 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