Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用相同的数据填充页面上的多个元素(具有相同的类)?_Javascript_Getelementbyid_Getelementsbyclassname - Fatal编程技术网

Javascript 如何使用相同的数据填充页面上的多个元素(具有相同的类)?

Javascript 如何使用相同的数据填充页面上的多个元素(具有相同的类)?,javascript,getelementbyid,getelementsbyclassname,Javascript,Getelementbyid,Getelementsbyclassname,我知道如何显示当前年份并通过ID传递它,但是ID当然只显示一次。我需要能够显示它在整个网站多次 我如何做到这一点 //获取年份 var yyyy=新日期().getFullYear(); currYear.innerHTML=yyyy; //试图显示为类 document.getElementsByClassName('thisYear')[0]=yyyy 据我所知,您试图将当前年份添加到HTML中的多个元素中?当前,您仅将其分配给第一个([0])。 您可以使用类thisYear解析每个元素,

我知道如何显示当前年份并通过ID传递它,但是ID当然只显示一次。我需要能够显示它在整个网站多次

我如何做到这一点

//获取年份
var yyyy=新日期().getFullYear();
currYear.innerHTML=yyyy;
//试图显示为类
document.getElementsByClassName('thisYear')[0]=yyyy

据我所知,您试图将当前年份添加到HTML中的多个元素中?当前,您仅将其分配给第一个(
[0]
)。 您可以使用类
thisYear
解析每个元素,并将当前年份添加到这些元素中

//获取年份
var yyyy=新日期().getFullYear();
//试图显示为类
//document.getElementByClassName返回htmlCollection。不是直接的数组。
//https://stackoverflow.com/a/3871602/5784924
Array.from(document.getElementsByClassName('thiswear')).forEach(function(element){
element.innerHTML=yyyy;
});
今年
今年
今年不行
今年不行

document.getElementsByClassName('thisYear')[0]=yyyy
尝试将调用返回的DOM元素设置为年份,而不是将DOM元素的某些属性设置为年份

要使代码正常工作,“快速修复”是将
.innerHTML
添加到行中:

document.getElementsByClassName('thisYear')[0].innerHTML = yyyy;
但是,
.getElementsByClassName()
(以及来自 20世纪90年代,如
getElementsByTagName()
getElementsByName()
和 其他)不应再使用。我已经写过这个和这个想法 将索引添加到返回节点列表的方法的末尾

相反,请使用符合标准的现代
.querySelector()
.queryselectoral()
,然后需要在集合中循环并分别修改元素

请参阅内联的附加注释:

//获取年份
var yyyy=新日期().getFullYear();
//.querySelectorAll返回一个节点列表,该列表不是实际的数组实现。
//IE不支持在节点列表上调用.forEach,所以如果需要支持IE
//为了调用.forEach,需要将节点列表转换为aray,然后
//需要以IE能够理解的方式(而不是Array.from())执行此操作:
//Array.prototype.slice.call(document.querySelectorAll('.thiswear')).forEach(函数(元素){
//但是,如果您不关心IE,可以直接在节点列表上调用.forEach()
document.querySelectorAll('.thiseyear').forEach(函数(元素){
//如果要更新的内容不包含任何HTML,请不要使用.innerHTML
//这会影响性能和潜在的安全性,请改用.textContent
element.textContent=yyyy;
});
div{margin bottom:1em;}
今年
今年
今年不行
今年不行

我猜您试图将当前日期分配给同一类的多个元素,如果是这样的话。请看下面的示例

var items = document.getElementById( 'items' ),
    divs = document.getElementsByClassName( 'count' );

[].slice.call( divs ).forEach(function ( div ) {
    div.innerHTML = items.innerHTML;
});
资料来源:

document.getElementsByClassName(“今年”)[0]
在整个站点中多次显示它。这就是我在这里@ScottMarcus的原因。我已经尝试过了,但无法让它工作。现在,如果你知道所有这些……为什么不在对话中添加一个建设性的内容呢?存储在本地存储中对于这样的事情来说太多了。在下面的答案中,你可以看到forEach循环是我真正想要的根据您所写的“在整个站点中多次显示”,
localStorage
是您所需要的,并且是有建设性的。您说下面的答案显示了您所需要的,这表明您没有提出正确的问题,因为其中没有任何内容能够解决整个站点全年的使用问题。不,因为当同一数据需要在站点中多次显示时,您需要d将其存储在某个位置,这样您就不必一次又一次地生成该数据,因此使用cookies或
localStorage
。现在您的问题似乎是“如何使用相同的数据填充具有相同类的页面上的多个元素”。而将其放入循环只会使情况变得更糟。使用
querySelectorAll()
。在这种情况下,我们不是将其放入循环中,而是获取值并解析这些值。我理解为什么
querySelectorAll
更好,但由于我试图回答问题,我希望尽可能使用OP的大部分代码。不过,感谢您的建议。@ScottMarcusThe循环问题与
.innerHTML
.innerHTML
本身存在性能问题,但不应在循环中使用,因为您会反复修改DOM,每次都会导致重新绘制和重新流。首先,在这种情况下,数据不包含任何HTML,因此
.innerHTML
甚至不应使用,
。textContent
应该使用。但是,如果您这样做了有了HTML,您应该使用循环来构建一个HTML字符串,然后在循环之后,使用
.innerHTML
,只将它注入DOM一次。如果我们不教育新的程序员关于25岁以上的、不应该再使用的坏代码或坏API用法,我们将继续在现代应用程序中看到这些坏代码。
.getEle2019年永远不应该使用mentsByClassName()
(以及它的传统版本)。我们仍然随处可见它的唯一原因是人们不知道什么更好,他们只是复制别人似乎“有效”的代码。如果你觉得我的答案在任何方面都不好,请随意发布你自己的答案。我会很高兴地投票。你有好的观点,我担心它们可能会在评论中被忽略。@ScottMarcus已经标记Nicolas的答案是正确的,但我将使用你的@ScottMarcus。谢谢。