jQuery数组和jQuery对象之间的技术差异是什么?

时间:2010-07-21 19:11:04

标签: jquery

这两个中哪个是正确的?

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

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

我想知道我是否对jQuery的某些方面如何工作有一个基本的误解,或者它是否只是在每个函数中内置了很多容差以允许单个元素或元素集合。

3 个答案:

答案 0 :(得分:4)

第一个是正确的,第二个将失败,因为没有定义回调函数。如果定义了一个回调函数并且将click事件处理程序应用于.each()中回调内的每个迭代元素,那么这两个元素在功能上是相似的。但是,each调用实际上是多余的,因为jQuery命令/方法通常应用于jQuery对象中的所有匹配元素(有.val()之类的某些方法可以执行不是,但他们是例外而不是常态)。这是通过内部应用.each():)

来完成的

jQuery对象是一个具有类似数组属性的对象;所有匹配的元素都是对象的索引属性,即

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

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

其中[DOM Element]表示DOM中与选择器匹配的HTMLElement的引用。 像数组一样的优点是它使得对象上的数组操作非常简单。

答案 1 :(得分:1)

jQuery对象是DOM元素数组的包装器。所以“jQuery数组”一个jQuery对象。该对象包含页面上与选择器匹配的每个元素。您在jQuery对象上调用的大多数方法都会隐式循环遍历数组中的所有元素并应用于所有元素。

  

或者它是否有很大的容忍度   内置于其每个功能中   允许单个元素或   元素集合。

情况就是这样。实际上每个方法都适用于一个元素,但是jQuery会调用它,因为它有多个对象可以处理。我相信它实际上在内部使用.each()来执行此操作,因此如果您了解.each()如何工作,那么您就能理解jQuery的隐式循环是如何工作的。

某些方法不适用于集合中的每个对象,但在文档中没有这样说。例外是适用于每个元素没有意义的方法。例如,如果调用$('.blah').innerHeight(),您将获得$('.blah.')返回的jQuery对象中第一个元素的高度。

还有一些方法可以获取和设置属性。获取时,它们返回第一个元素的值,并在设置时应用于所有匹配的元素。例如,如果您致电$('.blah').css('font-size'),您将从集合中的 第一个 元素中获得尺寸,但如果您致电$('.blah').css('width', 100),则可以ll在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()

答案 2 :(得分:1)

 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
相关问题