我可以'无法使className属性在Safari上工作
I can't get the className property to work on 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);
}
}
}
但我得到了同样的错误:页面无法加载。。
问题是,您的代码运行在一个无限循环中。原因是:
-
通过下面的调用,您已经获取了类为"year"的所有元素。返回的集合是动态集合
years = document.getElementsByClassName("year");
-
在遍历集合时,您将创建新的锚点元素,并将它们设置为"year"类。
-
当您将它们附加到文档中时,它们将自动添加到第一步创建的集合中,因为它是一个动态集合,因为新元素与集合的"subject"(此处为类"year")匹配。
为了避免无限循环,你有很多可能性。
-
在变量中缓存长度属性
var i=0, len = years.length;i<len;i++
但使用这种方法,您无法确定是将新元素附加到集合中,还是以某种"逻辑"或"随机"顺序添加。
-
将集合转换为JavaScript数组
years = document.getElementsByClassName("year"); years = Array.prototype.slice.call(years, 0);
-
或者使用document.querySelectorAll,它返回静态元素集合。
years = document.querySelectorAll('.year');
我会选择#2或#3的方法。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- 如何在 Safari 中获取下载属性行为
- jQuery $.ajax 在 Safari 中去除 JSON 对象属性
大小属性在 Safari 中受支持,但在 JS img 对象中缺失
- 表到 CSV 而不使用下载属性,因为它在 Safari 浏览器上不受支持
- Chrome,Safari - 未捕获的类型错误:无法读取 null 的属性“状态”
- 我可以'无法使className属性在Safari上工作
- Safari提供了错误的height()属性
- 标题属性不适用于Safari上的SVG Rect
- 关于在循环函数中设置本地属性的错误(Firefox和Safari)
- 如何在javascript中获得数据属性-不工作在ios safari浏览器
- 类型错误:试图分配只读属性.在iOS8 Safari上
- 属性=选择器在safari 5.1.7中无法识别
- Safari -数据导出/html下载属性不工作
- 在Safari浏览器上下载属性