【问题标题】:Is jQuery an Array?jQuery 是一个数组吗?
【发布时间】:2011-08-15 04:38:02
【问题描述】:

我刚接触 jQuery,但在理解它是什么时遇到了问题。如何在 jQuery 对象上使用数组样式索引但 jQuery 不是数组?这是javascript的东西吗?

<ul id="myUL">
<li></li>
<li id="second"></li>
<li></li>
</ul>

var jqueryObject = $("#myUL > li");
alert(jqueryObject[1].attributes.getNamedItem("id").value);

if (jqueryObject instanceof Array) {
    alert('value is Array!');
} else {
    alert('Not an array');//this is what pops up
}

【问题讨论】:

  • 如果您安装了 Chrome,请在此页面上打开 javascript 控制台并输入:var foo = $("div");控制台.log(foo);看看返回的对象。这可能会有所帮助。
  • 这只是给了我一个 div 数组(不知道我可以在 Chrome 中做到这一点!)。我看不出它在哪里表明 jQuery 如何模仿数组索引。

标签: jquery arrays


【解决方案1】:

jQuery 集合是一个对象,其属性编号类似于数组索引(以及其他一些属性和方法),每个都包含一个匹配的元素。它还被赋予了一个长度属性来告诉你选择器匹配了多少个元素。见http://api.jquery.com/Types/#jQuery

另外,是的,它部分是 JavaScript 的东西——JS 允许您使用点表示法或方括号表示法访问对象的属性。

【讨论】:

  • 抱歉,我无法理解您所说的内容。你是说 jQuery 就像 jQuery.0="value", jQuery.1="value"?
  • 没有。 jQuery()$() 是一个返回 jQuery 集合对象的函数。该对象被构建为具有一些类似数组的属性,但不是数组。 var myDivCollection = $( 'div' ); //myDivCollection now holds a collection object with all DIV tags from the page in the structure described in the link I put in my answer
  • 对不起,我有时有点慢,但我刚刚明白了:jqueryObject["2"]="value";//创建一个名为 2 alert(jqueryObject[2]); 的属性//显示“值”
  • 缓慢是可以的。 :) 所以你现在控制住了吗?
  • 嗯,我正在查看 jQuery 的开发版本,看看我是否看到数字被添加为 jQuery 对象的属性,并被分配为 html 元素作为值。如果我看到了,那我就知道我终于明白了
【解决方案2】:

根据docs,没有:

jQuery 对象本身的行为很多 像一个数组;它有一个长度 属性和元素 对象可以被他们的访问 数字索引 [0] 到 [length-1]。 请注意,jQuery 对象不是 实际上是一个 Javascript Array 对象,所以 它没有 a 的所有方法 true 数组对象,例如 join()。

【讨论】:

    【解决方案3】:

    jQuery 集合包装器是 JS 意义上的对象。

    JS 对象有 operator[] 通常可以接受任何类型作为索引。 所以这些陈述是有效的:

    var obj = {};
    obj[0] = element1;
    obj[1] = element2;
    //...
    obj[10] = element10;
    // and yet
    obj[false] = someValue1;
    obj[true] = someValue2;
    // and obviously 
    obj["first"] = 1; // equivalent (but not exact) of obj.first = 1;
    obj["second"] = 2; 
    

    简而言之,对象是一个键/值映射,其中键可以是任何类型。

    【讨论】:

    • obj.first = 1 的等效(但不精确); ?怎么样?
    【解决方案4】:

    不是。但是如果你想使用 JS Array 方法,比如在 $(...).map(...) 调用之后使用 .join(),你可以使用 $.makeArray 将 jQuery 集合转换为真正的 JS Array:

    http://api.jquery.com/jQuery.makeArray/

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2012-05-16
      • 1970-01-01
      • 2011-10-22
      相关资源
      最近更新 更多