假设我有一个元素数组的地图。回调函数获取数组中该位置的索引和值。
如果我在$()中包装回调接收的数组元素,它的行为与我期望的一样。如果我使用它而不将其包装在$()中,则会出错。
var nonHiddenElements = $( "form :input" ).not(':hidden');
nonHiddenElements.map(function(index, element){
input_id = $(element).attr('id'); // this works
input_id = element.attr('id') ; // this gives an error
})
有人可以解释一下这是如何运作的。 这是一个jQuery怪癖,还是一个JavScript的东西?
我的nonHiddenElements数组究竟包含哪些类型的对象? 什么是传递给回调的元素? 主要是$()在做什么?
答案 0 :(得分:4)
你需要了解jQuery实际上是如何工作的。我将尝试简要解释一下。
$
只是一个普通的javascript函数。 jQuery
=== $
,只是一个具有奇特名称的函数。此功能可以执行许多不同的操作,具体取决于您传递的内容。例如,如果传递一个字符串,它将被视为CSS选择器,jQuery内部将尝试查找相应的DOM元素。或者,如果您传递一个以<
开头并以>
结尾的字符串,jQuery将通过提供的HTML字符串创建一个新的DOM元素。
现在,如果您传递DOM元素或DOM元素的NodeCollection,它/它们将被包装到jQuery实例中,以便它们可以拥有jQuery原型方法。 jQuery提供了许多原型方法。例如text
,css
,append
,attr
- 这些都是jQuery原型的方法。它们的定义基本上就像这样(简化):
jQuery.prototype.text = function() { ... }
普通的DOM元素没有jQuery提供的那些方便的方法。在map
或each
之类的方法内部,如果像你一样检查this
值或element
参数,你会发现它们实际上不是jQuery实例:
element instanceof jQuery // => false
当然,你不能使用不是实例的实例方法。
因此,为了使用jQuery原型方法,你需要一个jQuery实例,如果你通过传入的DOM元素调用jQuery函数,你可以获得它:
$(element) instanceof jQuery // true
答案 1 :(得分:1)
Javascript是一种编程语言。
jQuery是一个JavaScript库。
使用jQuery:
$("some element")
在原生JavaScript中你必须做这样的事情。
getElementById('elementByID')
在此详细解释:https://developer.mozilla.org/en-US/docs/Web/API/document.getElementById
MDN对于初学者来说是一个很好的资源。 https://developer.mozilla.org/en-US/docs/Web/JavaScript