3 回答
TA贡献1836条经验 获得超3个赞
您的功能实际上很好,如果您只有这 3 种情况,则不需要更动态的解决方案。
无论如何,这是一个更动态的解决方案,它也适用于 3/4、5/5 ...。
这个想法是提取第一个和第二个数字(n和k)并打印n黑色星星和k-n白色星星。
Array.from (document.getElementsByClassName ('completionstatus')).forEach ( (x) => {
[n, k] = x.innerHTML.replace ('Progress: ', '').split ('/');
text = '';
for (let i=0; i<n; i++) text += '★';
for (let i=0; i<k-n; i++) text += '☆';
x.innerHTML = text;
});
<li>
<span class="completionstatus">Progress: 0/2</span>
</li>
<li>
<span class="completionstatus">Progress: 1/2</span>
</li>
<li>
<span class="completionstatus">Progress: 2/2</span>
</li>
TA贡献1830条经验 获得超3个赞
我给你做了一个工作示例:
function myFunction() {
var text;
// Iterate all elements and replace with stars
Array.from(document.getElementsByClassName("completionstatus")).forEach(
function(elm, index, array) {
if (elm.innerHTML === "Progress: 0/2") elm.innerHTML= "☆☆";
else if (elm.innerHTML === "Progress: 1/2") elm.innerHTML= "★☆";
else if (elm.innerHTML === "Progress: 2/2") elm.innerHTML= "★★";
}
);
}
window.onload = function() {
myFunction();
}
<li>
<span class="completionstatus">Progress: 0/2</span>
</li>
<li>
<span class="completionstatus">Progress: 1/2</span>
</li>
<li>
<span class="completionstatus">Progress: 2/2</span>
</li>
TA贡献1865条经验 获得超7个赞
您的代码的想法是完美的,但它失败了,因为您在向其添加值之前设置了添加文本值,我做了一个带有一些更改的示例:
我把星星放在一个数组中,因为这样我可以更容易地访问星星,
我使用 forEach 使用 ul 的类来迭代元素,但是由于
getElementByClassName
在迭代元素之前返回一个 HTMLCollection(不是数组),因此有必要将 nodeElements 添加到数组中,并且我使用扩展运算符来执行此操作我使用 innerText 而不是 innerHTML 因为性能更高(在这种情况下,差异并不重要,但以防万一)
我设置了一个错误示例,只是为了看到所有功能都符合您的预期。
function replaceText() {
const stars = ["☆☆", "★☆", "★★"];
const completionStatusElements = document.getElementsByClassName("completionstatus");
[...completionStatusElements].forEach((el) => {
let elementText = el.innerText;
if (elementText === "Progress: 0/2") el.innerText = stars[0];
else if (elementText === "Progress: 1/2") el.innerText = stars[1];
else if (elementText === "Progress: 2/2") el.innerText = stars[2];
else el.innerText = "error";
});
}
<li>
<span class="completionstatus">Progress: 0/2</span>
</li>
<li>
<span class="completionstatus">Progress: 1/2</span>
</li>
<li>
<span class="completionstatus">Progress: 2/2</span>
</li>
<li>
<span class="completionstatus">Progress:sdf 2/2</span>
</li>
添加回答
举报