为了找到某个类名的子对象,我必须创建自己的助手函数
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");
而不是上面的全局函数?
3条答案
按热度按时间bkhjykvo1#
让我们把它分成几个可回答的部分:
问题一:
JavaScript中的class和classname有什么区别?
你的标题问题。
答案一:
类是html元素
<span class='classy'></span>
中的属性另一方面,
.className
是一个属性,可以在元素上调用它来获取/设置它的类。设置类也可以通过
.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],其中包含具有所有给定类名的所有子元素。
要重复使用答案中的示例,请执行以下操作:
mzillmmw2#
不要混淆DOM元素的保留字'class'和'className'属性。
根据MDN:
编辑:“类”word used on js 1.0 but in js 2.0 was merged with ECMAScript 4这是相当不受欢迎和贬值。但它仍然是保留字。
kdfy810k3#
一般的概念是class是一个对象,
className
是它的“一个”属性。请参阅有关如何使用class
属性进行操作的链接。如果我的理解/理解有误,请纠正我。https://www.w3schools.com/jsref/prop_html_classname.asphttps://www.w3schools.com/jsref/prop_element_classlist.asp