2009-02-17 2 views
12

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

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

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

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

$elemSel.children('td').nodeName 

(NODENAME является DOM связаны между собой, дети связано JQuery)

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

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

EDIT 2:

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

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

  2. Если я присвою переменной «this» переменной, это новый var DOM или JQuery? Если это JQuery, как я могу преобразовать это в элемент DOM? (Поскольку я не могу использовать get (0))

    var $ elemTd = $ (this);

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

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

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

ответ

24

Вам нужно .get (0) результат, чтобы получить DOM-объект готов.

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

Read "Peeling Away the jQuery Wrapper and Finding an Array" по Коди Линдли


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); 

Assinging 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 является индекс, какой пункт доступа.

+0

Спасибо за объяснение. Итак, если я хочу работать с отдельными элементами объекта JQuery и хочу запускать на них методы Jquery, нужно ли использовать «каждый»? Есть ли другой путь? – 2009-02-17 16:14:15

+0

Объект jQuery - это массив. Таким образом, вы можете обрабатывать каждый экземпляр объекта jQuery, например массив. Получите доступ к первому элементу этого массива, чтобы запустить на нем свои собственные методы javascript. – Sampson

+0

Могу я попросить вас взглянуть на вопрос jquery на другую тему здесь: http://stackoverflow.com/questions/13137404/jquery-find-div-class-name-at-a-certain-position-while -прокрутка? –

1

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

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

Смежные вопросы