【发布时间】:2022-01-04 19:34:32
【问题描述】:
我是 js 新手,我正在尝试按类名遍历元素并使用 javascript 更改元素的文本内容。以下是我到目前为止所拥有的,但这不起作用。
<script type="text/javascript">
function dformat(i) {
var hasDate = document.getElementsByClassName("dformat")[i].textContent.trim().includes("/");
if(hasDate === false) {
window.setTimeout(dformat, 100); /* this checks the flag every 100 milliseconds*/
} else {
dateString = document.getElementsByClassName("dformat")[i].textContent.trim();
const options = { year: 'numeric', month: 'short', day: 'numeric' };
let dateArr = dateString.split("/");
var sMonth = dateArr[0];
var sDay = dateArr[1];
var sYear = dateArr[2];
let newDateString = sYear + "/" + sMonth + "/" + sDay
let newDate = new Date(newDateString);
document.getElementsByClassName("dformat")[i].textContent=newDate.toLocaleDateString('en-us', options);
}
}
var ditems = document.getElementsByClassName("dformat");
for (var i = 0; i < ditems.length; i++) {
dformat(i);
}
</script>
以下是其中一个元素的示例
<span class="dformat">26/06/1992</span>
预期的输出将是更改每个元素上的文本,类为 dformat
更新: 我在单个元素上尝试了与 getelementbyid 相同的函数(即没有 for 循环)并得到了预期的结果。我在按类名而不是按 id 对单个元素执行相同操作时遇到了麻烦。
【问题讨论】:
-
@Randy Casburn 我在单个元素上尝试了与 getelementbyid 相同的函数(即没有 for 循环),日期结果与预期结果一样有效。我在按类名而不是按 id 对单个元素执行相同操作时遇到了麻烦。
-
我不确定我理解循环调用函数的动机。如果您打算处理每一个,为什么不循环遍历从
.getElementsByClassName()返回的集合? -
newDateString在我测试时持有 Date 构造函数的无效输入,你是如何设法用这个构造一个日期的,例如。 '1992/26/06',再加上 Randy 所说,您需要每个 like 构造,而不是简单地使用外部 for 循环来传递索引这是可行的方法-let newDate = new Date(sYear, sMonth, sDay);
标签: javascript html