【问题标题】:Will the selector $('#myform') return a array?选择器 $('#myform') 会返回一个数组吗?
【发布时间】:2016-07-20 22:53:16
【问题描述】:

我是 javascript 和 jQuery 的新手,我刚刚阅读了类似 $('#myForm').get(0).submit() 的代码

据我了解,myForm<form> 的 id,它应该是唯一的 id。那么为什么这段代码使用get(0) 似乎选择器返回一个数组。会有多个 html 元素具有相同的 id myForm 吗?

【问题讨论】:

  • 使用 ID 时应该只有一个。不用担心 get(0) 见stackoverflow.com/a/1053890/1071091
  • Any jQuery 选择器返回数组(实际上是 array-lke 对象)不管结果匹配数。

标签: javascript jquery


【解决方案1】:

jquery 选择器返回一个数组。如果 DOM 是正确的,这意味着每个元素的 id 都是唯一的,那么你肯定可以使用

   $('#form_id').submit()

而不是

   $('#form_id').get(0).submit()

但是,$('#form_id') 返回一个 jquery 对象,而 $('#form_id').get(0) 返回一个 DOM 元素。 jquery 对象可以使用 jquery 函数。

  $('#id')//jquery object array
  $('#id')[0]//first element of this array
  $('#id').get(0)//first element of this array, DOM element
  $('#id').eq(0)//first element of this array, jquery object

【讨论】:

    【解决方案2】:

    据我了解,myForm 是 <form> 的 id,它应该是唯一的 id。 那么为什么这段代码使用 get(0) 似乎选择器返回一个数组。

    同理:

    $('#myForm')[0].submit(); 
    

    需要注意的是,jQuery 选择器为您提供了一个 jQuery 对象,并且只能在其上应用 jQuery 方法。

    但在您的情况下,您似乎想触发本机 DOM submit 事件,并且只能应用于 dom 节点而不是 jQuery 对象。所以,.get(0) 返回一个 DOM 节点,并在其上触发了 .submit() 事件。虽然这可以在 javascript 中简化为:

    document.querySelector('#myForm').submit();
    

    document.getElementById('myForm').submit();
    

    如果您访问.get() 文档:

    说明: 检索与 jQuery 对象匹配的元素之一。 .get() 方法授予对每个 jQuery 对象下的 DOM 节点的访问权限。如果 index 的值超出范围(小于负数元素或等于或大于元素数),则返回 undefined。

    【讨论】:

      【解决方案3】:

      对于 id 选择器,jQuery 使用 JavaScript 函数 document.getElementById()

      它所做的是选择具有给定 id 属性的 single 元素。 Jquery 返回它包装在自定义对象中。来自devx blog

      选择器返回一个称为“包装集”的 jQuery 对象,它是 一个类似数组的结构,包含所有选定的 DOM 元素。 您可以像数组一样遍历包装集或访问 通过索引器的单个元素(例如 $(sel)[0])。更多的 重要的是,您还可以将 jQuery 函数应用于所有 选定的元素。

      【讨论】:

        【解决方案4】:

        jquery 总是返回一个数组,但您可以像使用单个对象一样使用它。

        例如:

        $("#someID").submit();
        

        或任何其他 jquery 函数:

        $("#someID").html("<h1>test</h1>");
        

        您还可以通过以下方式获取 javascript 元素:

        $("#someID")[0];
        

        【讨论】:

        • jQuery 选择器总是返回一个对象。用 typeof 检查一下。
        • 试试这个:) var x = new Array(); typeof(x); // returns object ;)
        • 哦,对了,我忘了如果某个东西是一个数组,那么检查 javascript 会更复杂,因为所有东西实际上都是一个对象。你可以用这个 if( Object.prototype.toString.call( x) === '[object Array]' ) { alert( 'Array!' ); }
        【解决方案5】:

        正如您在文档中看到的:https://api.jquery.com/submit/ 您可以直接向表单对象执行提交函数:

        $('#myForm').submit();
        

        此外,您可以在此处阅读https://api.jquery.com/get/

        每个 jQuery 对象也伪装成一个数组

        【讨论】:

          猜你喜欢
          • 2021-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-30
          • 2012-05-30
          相关资源
          最近更新 更多