javascript - 无法在 Chrome 和 FF 中随机化 HTMLCollection
问题描述
在下面的示例中,我尝试随机着色 SVG 的“组”元素。尽管在此处运行代码段时出现问题,但代码在 Internet Explorer 中按预期工作。在 Chrome 和 FireFox 中,数组不是随机的。
PS 如果我将 HTML 集合转换为数组,则该代码适用于上述所有浏览器。
/*
* Randomize array element order in-place.
* Using Durstenfeld shuffle algorithm.
* https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
*/
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
function clorize(){
var svgGroups = document.getElementById("svgContainer").getElementsByTagName("g");
shuffleArray(svgGroups);
console.log(svgGroups);
var red = 3;
for (var i=0; i<svgGroups.length; i++){
if (i<red){
svgGroups[i].setAttributeNS (null, 'fill', "#991c1f");
}
else{
svgGroups[i].setAttributeNS (null, 'fill', "#007777");
}
}
}
<div id="svgContainer">
<svg xmlns="http://www.w3.org/2000/svg" style="display: block;" viewBox="0 0 100 100" width="100" height="100">
<g fill="gray" transform="translate(0)">
<rect width="30" height="30" />
</g>
<g fill="gray" transform="translate(35)">
<rect width="30" height="30" />
</g>
<g fill="gray" transform="translate(70)">
<rect width="30" height="30" />
</g>
<g fill="gray" transform="translate(0 35)">
<rect width="30" height="30" />
</g>
<g fill="gray" transform="translate(35 35)">
<rect width="30" height="30" />
</g>
<g fill="gray" transform="translate(70 35)">
<rect width="30" height="30" />
</g>
<g fill="gray" transform="translate(0 70)">
<rect width="30" height="30" />
</g>
<g fill="gray" transform="translate(35 70)">
<rect width="30" height="30" />
</g>
<g fill="gray" transform="translate(70 70)">
<rect width="30" height="30" />
</g>
</svg>
</div>
<input type="button" onclick="clorize()" value="Colorize SVG">
解决方案
推荐阅读
- r - 比较两列中的值并在 R 或 awk 中重新编码
- python - 使用 feedparser 分别识别 itunes:keywords 和 itunes:category?
- android - getActivity 无法解决
- image - 生成从 SD 卡运行的 Ubuntu 映像
- javascript - 在 sessionStorage 中同时替换数据的最佳方法
- angular - 我想让 mat-icon 具有多行工具提示。我尝试了以下方式,但没有在工具提示中显示 \n
- machine-learning - 随机森林中预测值的特征重要性?
- sql - 如何在oracle DB中检查某个日期是否在当前日历月中
- java - 使用静态全局变量或内联变量 - 哪个更有效?
- android - Firebase onNewToken 在 Android > 8.0 上崩溃