Javascript 为什么$(';el';)[0].className可以工作,但$(';el';).className不能工作?
我注意到Javascript 为什么$(';el';)[0].className可以工作,但$(';el';).className不能工作?,javascript,jquery,Javascript,Jquery,我注意到className属性在没有索引的jQuery中不起作用,这是为什么 另外,在jQuery中是否还有其他常见的JS属性/方法无法正常工作 HTML: var el=$('.par')返回一个值。是上的属性,而不是上的属性 jQuery对象具有类似数组的定义,因此el[0]返回具有className属性的底层对象 据我所知,jQuery不喜欢开发人员直接更新其属性。它简单地公开了各种实用函数,以便于开发 引用下面的一条好评论 jQuery方法只能用于jQuery对象;本机DOM属性/方法只
className
属性在没有索引的jQuery中不起作用,这是为什么
另外,在jQuery中是否还有其他常见的JS属性/方法无法正常工作
HTML:
var el=$('.par')代码>返回一个值。是上的属性,而不是上的属性
jQuery对象具有类似数组的定义,因此el[0]
返回具有className属性的底层对象
据我所知,jQuery不喜欢开发人员直接更新其属性。它简单地公开了各种实用函数,以便于开发
引用下面的一条好评论
jQuery方法只能用于jQuery对象;本机DOM属性/方法只能在本机DOM节点上使用
注:var el=$('.par')
返回元素的集合,el[0]
返回该列表中的第一个元素
您可以使用.addClass
将类添加到元素中
对于第一个元素
el.eq(0).addClass('new_class');
对于所有元素
el.addClass('new_class');
更多阅读:
className是DOM元素api的一部分
var el=$('.par')
将返回一个包含元素数组的jQuery对象
使用el[0]
访问可以访问api的第一个元素
jQuery提供了一种简单的方法,可以将类添加到一个元素或一组元素中,这些元素由一个名为addClass的选择器匹配。你可以用这个:
var el = $('.par');
el.addClass('new class');
还请注意,通常最佳做法是使用$
命名包含jQuery对象的变量,如下所示:
var $el = $('.par');
为您提供一个jQuery对象,该对象可能包含一个或多个DOM元素
var el = $('.par')[0];
返回jQuery对象选择中的第一个DOM对象className
是DOM元素上的属性,而不是jQuery对象上的属性
$('.par').attr('class');
将是获取第一个元素的类名的jQuery方法
如果只想将特定类添加到与另一个类匹配的元素中,可以使用
$('.par').addClass('testclass');
这将将测试类添加到具有PAR类的所有元素,而您的方法只将其添加到页面上的第一个元素。
其他属性
另外,在jQuery中是否还有其他常见的JS属性/方法无法正常工作
大多数dom属性不会直接作用于jQuery对象。您可以使用[0]获取这些元素的第一个匹配元素的原始dom元素。然而,它们中的大多数在jQuery中也有直接的等价物。使用jQuery版本的优点是,它们通常更简单,并且在不同浏览器中工作一致。不过,本地dom属性的访问速度往往更快。jQuery dom对象实际上是一个匹配元素的列表。由于要在DOM元素列表上设置变量,jQuery无法将它们应用于整个列表el[0]
是第一个匹配的元素。(如果您有多个元素,使用el[0]
将只设置第一个匹配的元素,如果没有任何匹配项,el[0]
将引发ValueError。)您可能应该使用jQuery的内置类操纵函数:
el.addClass("new class");
要删除这些类,请执行以下操作:
el.removeClass("new class");
要切换它们,请执行以下操作:
el.toggleClass("new class");
这可能与问题没有直接关系,但是如果您使用jQuery,那么您还应该使用jQuery易于使用的方法来修改jQuery对象中所有DOM元素的类名
因为一个是DOM节点,具有className属性,而另一个是没有className属性的jQuery对象。但例如,value在jqueryNo内部工作,它不工作,val()
与jQuery一起工作<代码>值
仅适用于DOM节点。那么可能是我弄错了。因此,jQuery中不能使用任何常规JS属性?jQuery方法只能用于jQuery对象;本机DOM属性/方法只能在本机DOM节点上使用。您还应该注意,[0]
从jQuery对象中获取第一个元素对象;)您还应该注意,您可以使用.addClass()
方法通过jQuery添加类。当然,应该注意的是document.querySelector(“.par”)
比$('.par')[0]
@Kolink至少快两个数量级,尽管在这样的基本示例中这不是一个主要问题
el.addClass("new class");
el.removeClass("new class");
el.toggleClass("new class");
$(function () {
var cname = $('.par').attr('class'); // get class attribute
if (!$('.par').hasClass('some-new-class')) {
$('.par').addClass('some-new-class');
}
});