我无法让 className 属性在 Safari 上工作
在添加 a.className = "year";
之前,我尝试了这个 javascript 函数,一切正常,但是添加它后,我无法使用 Safari 或 Google Chrome 加载页面。我需要做的只是向新的 a
元素添加一个类,我也尝试使用 a.setAttribute("class", "year");
但我得到了同样的错误:页面无法加载。如果有人知道如何帮助我,我将非常感激!
function create_timeline() {
timeline = document.getElementById("timeline_ul");
years = document.getElementsByClassName("year");
for (i=0;i<years.length;i++) {
if (years.item(i).nodeType==1) {
year = years.item(i).innerHTML;
a = document.createElement("a");
a.innerHTML = year;
a.className = "year";
timeline.appendChild(a);
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题是,您的代码在无限循环中运行。原因是:
通过下面的调用,您已经获取了类为“year”的所有元素。返回的集合是动态集合
在迭代集合时,您将创建新的锚元素,并将它们设置为“year”类。
当您将它们附加到文档时,它们将自动添加到第一步创建的集合中,因为它是一个动态集合,因为新元素与集合的“主题”(此处为“年份”类)匹配。
为了避免无限循环,你有很多可能性。
将长度属性缓存在变量中
但使用这种方法,您无法确定新元素是否附加到集合中或以某种“逻辑”或“随机”顺序添加。
将集合转换为 JavaScript 数组
或使用 document.querySelectorAll,它返回元素的静态集合。
我会采用方法#2 或#3。
the problem is, your code runs in a infinite loop. The reason for that is:
With the call below you've fetched all elements with class "year". The collection that is returned is a dynamic collection
while iterating through the collection, you are creating new anchor elements, and setting them the "year" class.
When you append them to the document, they will be automagically added to the collection created 1st step, because it is a dynamic collection, because new elements match the "subject" (here the class "year") of the collection.
to avoid infinite loops, you have many possibilities.
cache the length property in a variable
but with this approach, you cannot be sure whether new elements are appended to the collection or added in some "logical" or "random" order.
Convert the collection to a JavaScript array
or use document.querySelectorAll, which returns a static collection of elements.
I would go for approach #2 or #3.