.length和[0]的区别是什么来检查一个有ID的元素是否存在
What is the difference between .length and [0] to check if an element with an ID exists
我已经看到了两种方法来检查具有特定ID的元素是否存在于页面上,我想知道为什么第二种方法有效。
我所看到的一种方式如下,我认为我理解它:
if ( $('#elementID').length > 0 ) {
//Do something
}
else {
//Do something else
}
另一种我不太理解的方法是:
if ( $('#elementID')[0] ) {
//Do something
}
else {
//Do something else
}
[0]是什么意思?我通常看到[…]用于数组的,所以这是返回一个数组吗?
谢谢。
jQuery选择器返回与选择器匹配的值数组。
第一个例子检查数组的长度。第二个例子试图检查第一个元素是否存在。
if ( $('elementID').length > 0 ) {
//checks the length of the array. If the selector hit at least 1 element it does something
if ( $('elementID')[0] ) {
//Tries to check if the first element exists.
//This really should work in this case, because jQuery will return jquery objects
//but in the general case for checking arrays is dangerous because will be incorrect for falsy values
所以最后,两者都是"If there are elements selected"的简写
我一开始说第二个是危险的。这在jQuery的情况下实际上不是真的,因为jQuery/DOM对象总是真实的。一般来说,使用if(element)
来检查一个元素是否存在是很危险的,因为它会对0或"这样的值返回false。因此,如果您不确定,我将推荐第一种惯例,因为它在更广泛的情况下更安全。但是对于这个特殊的例子,两个选项都可以。
一个jQuery包装对象有它的所有元素/等存储在一个类似数组的方式,这就是为什么.length
工作在它,你可以看到选择器是否返回任何结果。
$('#elementID').length
因为jQuery以类似数组的方式存储它们,你可以通过使用典型的[]
括号符号来单独访问它们。注意,这也将返回一个原始javascript HTMLElement。它将从其中移除包装的jQuery。
$('#elementID')[0] // returns the 1st element
由于在本例中,都返回 true 结果,因此它将继续进入if语句。
// On a side note: make sure to _not_ do simply:
if ( $('#elementID') ) { }
jQuery将返回一个空的jQuery包装对象(它将是- true -),继续进入if语句。
指引你正确的方向:
var test = document.getElementById('test') //returns a HTML DOM Object
var test = $('#test') //returns a jQuery Object
var test = $('#test')[0] //returns a HTML DOM Object
它们实际上都与jQuery没有直接关系。$(selector)返回与选择器匹配的jQuery对象数组。因此,您可以使用Array。Length属性检查有多少个匹配项。同样,您可以通过它的从零开始的索引访问数组中的任何项。$(selector)[0]将返回数组中的第一个HtmlElement对象,$(selector)[1]将返回第二个。等等
虽然if ($(selector)[0])在某些情况下可以工作,但它不返回布尔值,因此条件有缺陷,不应该使用。相反,使用$(selector)。
- 向更新mysql查询传递一个id
- Javascript:表单验证getElementById仅返回第一个id元素
- JS在隐藏未定义的值后仅从数组中返回第一个id的值
- Meteor:访问另一个集合,每个块中有一个id
- js组合对象只返回一个id
- 给每个谷歌距离矩阵结果一个id
- 如何附加一个id's的详细信息只通过php或jquery提供一次
- Ember eror试图注册一个id已在使用的视图
- 如何使用innerHTML更改图像大小来给它一个id Javascript
- 具有一个#id的多选选项可显示n个隐藏表
- 设置一个按钮按下函数来触发一个Id为的Ajax调用
- 如何创建一个每行列数未知的html表,对齐列,并为每个单元格/行指定一个id
- jQuery鼠标滚动到下一个id
- 如何在 JavaScript 中获取另一个 ID 下的 ID
- Javascript 保存相同的 ID,而不会在 LocalStorage 中覆盖另一个 ID
- 如何在 html 中调用另一个 ID 中的特定 ID
- 将事件绑定到类中的所有元素,而不仅仅是一个 id
- 使用 JSP 为
-Elements 提供一个 ID - JS只使用一个id,忽略另一个id
- 找到一个按钮并通过jQuery / JavaScript分配一个ID