让我们把它分成几个可回答的部分:
问题一:
javascript 中的类和类名有什么区别?
你的标题问题。
答案1:
Class 是 html 元素中的一个属性<span class='classy'></span>
而另一方面,.className
是一个可以通过调用元素来获取/设置其类的属性。
var element = document.createElement('span');
element.className = 'classy'
// element is <span class='classy'></span>
设置类也可以通过以下方式完成.getAttribute('class')
and .setAttribute('class', 'classy')
。然而,我们经常更改操纵类,因此它值得拥有自己的.className
method.
问题2:
但是,当我在上面的函数中用类替换上面的 className 时,代码不起作用。所以我自然想知道 class 和 className 之间有什么区别。
答案 2:element.class 不是属性。
类可能是元素的属性,但你不能像这样调用它el.class
。你这样做的方式是el.className
, 就像你已经知道的那样。如果你看一下元素 MDN https://developer.mozilla.org/en-US/docs/Web/API/Element.className,你会看到元素有很多属性和方法,但是.class
不是一个。
问题3:
另外,返回通用对象的特定类名的子级列表的最佳方法是什么?
答案 3:使用 .getElementsByClassName
人们经常使用一个又一个的“连锁”方法来达到您想要的效果,而不是使用特定的功能。
根据您的需求,我认为您要求的是.getElementsByClassName
方法。这里有完整文档 https://developer.mozilla.org/en-US/docs/Web/API/Element.getElementsByClassName和摘录:
Element.getElementsByClassName() 方法返回一个实时 HTMLCollection [数组],其中包含具有所有给定类名的所有子元素。
要重用您答案中的示例:
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