Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么$(';el';)[0].className可以工作,但$(';el';).className不能工作?_Javascript_Jquery - Fatal编程技术网

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');
        }
    });