getElementsByClassName 不工作,但 Id 工作正常

getElementsByClassName is not working, but Id's work fine

我试图通过 Class 名称获取一些元素,但它不起作用。但是,如果我更改为按 ID 获取元素,则效果很好。想了解为什么 Class Name 方法不起作用。 这是一个 JSFiddle:http://jsfiddle.net/kXmpY/2681/ 如果我更改为 ID,它就可以工作。我错过了什么?

HTML:

<a href="#" class="cloneLink">Click me</a>
<div class="duplicator"> 
<label for="newInput">Label</label>
<input type="text">
</div>

JS:

document.getElementsByClassName("cloneLink").onclick = duplicate;

var i = 0;
var original = document.getElementsByClassName("duplicator");

function duplicate() {
var clone = original.cloneNode(true); // "deep" clone
clone.id = "duplicator" + i++; // there can only be one element with 
an ID
original.parentNode.appendChild(clone);
}

document.getElementsByClassName 将 return 一个名为 HTMLCollection 的类似对象的数组。为了让您的代码正常工作,您需要确保其长度大于零,然后访问元素并附加事件。

let elements = document.getElementsByClassName("cloneLink");
if(elements.length){
  elements.forEach( element => element.addEventListener("click" , duplicate))
}

document.getElementsByClassName returns 一个 HTMLCollection 而不是单个元素。

你需要写

var original = document.getElementsByClassName("duplicator")[0];

也就是说,如果您有一个具有您要操作的类名的元素。

The getElementsByClassName() method returns an array-like object of all child elements which have all of the given class names.

阅读更多相关内容here