2010-07-21 2 views
1

Из этих двух, что правильно?Какова техническая разница между массивами jQuery и объектами jQuery?

jQuery('someclass').click(function() { 
    alert("I've been clicked!"); 
}); 

или

jQuery('someclass').each().click(function() { 
    alert("I've been clicked!"); 
}); 

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

+0

примечание, чтобы увидеть, какой элемент вы выбрали вы можете использовать ... функцию (MyEvent) { предупреждение (myevent.target.nodeName); }); –

+0

Только первое правильно. Второй не будет работать вообще. Кроме того, если вы хотите выбрать элемент по имени класса, вам нужно использовать '.someclass' (начинается с периода) вместо' someclass'. – user113716

+1

Да, «someclass» без ведущего периода фактически ищет элемент html, называемый ''. – jasongetsdown

ответ

4

Первое правильно, второе не будет выполнено, так как функция обратного вызова не определена. Если была определена функция обратного вызова, и обработчик события клика применялся к каждому повторному элементу внутри обратного вызова в .each(), то два были бы функционально похожи. Однако вызов each действительно будет лишним, так как jQuery comands/methods - это , как правило,, применяемый ко всем согласованным элементам в объекте jQuery (есть определенные методы, такие как .val(), которые этого не делают, но они являются исключением, чем норма). Это делается путем внутреннего применения .each() :)

Объект jQuery - объект с свойствами типа массива; все соответствующие элементы индексированы свойства объекта, т.е.

<p>Hello</p><World</p> 

$('p'); // is an object { selector: 'p', O: [DOM Element], 1: [DOM Element], ... } 

, где [DOM Element] представляет собой ссылку на HTMLElement в DOM, который соответствует селектору. Преимущество такого типа массива заключается в том, что он делает операции массива на объекте очень простыми.

1

Объект jQuery является оберткой вокруг массива элементов DOM. Таким образом, «массив jQuery» - это объект jQuery. Объект содержит каждый элемент на странице, который соответствует селектору. Большинство методов, которые вы вызываете для объекта jQuery, неявно прокручивают все элементы массива и применяются ко всем из них.

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

Это своего рода случай. На самом деле каждый метод работает с одним элементом, но jQuery вызывает его столько раз, сколько у него есть объекты для работы. Я считаю, что это действительно использует .each() для этого, поэтому, если вы понимаете, как работает .each(), вы понимаете, как работает неявный цикл jQuery.

Некоторые методы не применяются ко всем объектам в коллекции, но те, которые не говорят об этом в своей документации. Исключениями являются методы, которые не имеют смысла применять к каждому элементу. Например, если вы вызываете $('.blah').innerHeight(), вы получите высоту первого элемента в объекте jQuery, возвращаемом $('.blah.').

Существуют также методы, позволяющие получать и устанавливать атрибуты. Когда они возвращают значение из первого элемента, а при настройке они применяются ко всем согласованным элементам.Например, если вы звоните $('.blah').css('font-size') вы получите размер от первого элемента в коллекции, но если вы звоните $('.blah').css('width', 100) вы установите стиль ширина каждый элемента в коллекции JQuery.

Обратите внимание, что на самом деле вы можете рассматривать объект jQuery как массив. Просто используйте нотацию массива для доступа к элементу.

$jQ_obj = $('.classy').find('.refined'); 
element = $jQ_obj[3]; 

Это будет хранить четвертый элемент на странице, которая имеет класс refined и является дочерним элементом, который имеет classy. Результирующий объект в element является необработанным объектом DOM.

Второй момент,

Поскольку ответ, который упомянул об этом был удален, убедитесь, что вы понимаете, как .each() работы. Вам нужно передать ему функцию, которую вы хотите применить к каждому согласованному элементу, точно так же, как обработчик события. Так оно и должно быть:

jQuery('.someclass').each(function(i) { //don't forget the dot! 
    $(this).click(function() { 
     alert("I've been clicked!"); 
    }); 
}); 

Внутри обратного вызова, чтобы .each()this ключевое слово относится к текущему элементу DOM будучи петельные через и Arg передается функции обратного вызова является индекс цикла. this является сырым элементом DOM (подумайте, что он пишет $('.someclass')[i]), поэтому вам нужно создать из него объект jQuery, чтобы позвонить на него .click().

0
Var object={}; 
object.push{id:1,name:{("madan","jeevan","charan")},education:"Hyderabad"}; 

Объект всегда возвращает только одну строку ,,

var Arrayobj=[]; 
Arrayobj.push({id:1,name:"madna"},{id:2,name:"jeevan"},{id:3,name:"charan"}); 

//Array can return more than one row 
Смежные вопросы