JavaScript中的class和classname有什么区别?

r1zk6ea1  于 2023-05-21  发布在  Java
关注(0)|答案(3)|浏览(277)

为了找到某个类名的子对象,我必须创建自己的助手函数

findChildrenByTagName = function(obj, name){
    var ret = [];
    for (var k in obj.children){
        if (obj.children[k].className === name){
            ret.push(obj.children[k]);
        }
    }
    return ret;
}

它是如何工作的一个例子是

var li = document.createElement('li');
var input = document.createElement('input');
input.setAttribute('class','answer_input');
li.appendChild(input);
console.log(findChildrenByTagName(li,"answer_input"));

然而,当我在上面的函数中用class替换上面的className时,代码不起作用。所以我很自然地想知道class和className之间有什么区别。在谷歌上快速搜索一下,什么也没有发现。
另外,返回泛型对象的特定类名的子级列表的最佳方法是什么?如果不存在这样的方法,有没有办法给所有对象添加一个方法,这样我就可以调用

li.findChildrenByTagName("answer_input");

而不是上面的全局函数?

bkhjykvo

bkhjykvo1#

让我们把它分成几个可回答的部分:

问题一:

JavaScript中的class和classname有什么区别?
你的标题问题。

答案一:

类是html元素<span class='classy'></span>中的属性
另一方面,.className是一个属性,可以在元素上调用它来获取/设置它的类。

var element = document.createElement('span');
element.className = 'classy'
// element is <span class='classy'></span>

设置类也可以通过.getAttribute('class').setAttribute('class', 'classy')完成。我们经常改变操纵类,但是,它值得自己的.className方法。

问题二:

然而,当我在上面的函数中用class替换上面的className时,代码不起作用。所以我很自然地想知道class和className之间有什么区别。

答案二:element.class不是属性。

Class可以是元素的属性,但不能像el.class那样调用它。你的方法是通过el.className就像你已经弄明白的。如果查看MDN for Element,您将看到元素有许多属性和方法,但.class不是其中之一。

问题三:

另外,返回泛型对象的特定类名的子级列表的最佳方法是什么?

答案三:使用.getElementsByClassName

人们通常不使用特定的函数,而是将方法一个接一个地“链接”起来,以达到预期的效果。
根据您的需求,我认为您要求的是.getElementsByClassName方法。以下是full docs和摘录:
getElementsByClassName()方法返回一个活的HTMLCollection [array],其中包含具有所有给定类名的所有子元素。
要重复使用答案中的示例,请执行以下操作:

var li = document.createElement('li');
var input = document.createElement('input');
input.setAttribute('class','answer_input');
li.appendChild(input);
console.log(li.getElementsByClassName("answer_input")[0]);
// would return the <input class='answer_input'> as the first element of the HTML array
mzillmmw

mzillmmw2#

不要混淆DOM元素的保留字'class'和'className'属性。
根据MDN

kdfy810k

kdfy810k3#

一般的概念是class是一个对象,className是它的“一个”属性。请参阅有关如何使用class属性进行操作的链接。如果我的理解/理解有误,请纠正我。
https://www.w3schools.com/jsref/prop_html_classname.asphttps://www.w3schools.com/jsref/prop_element_classlist.asp

相关问题