我正在玩MeteorJS,我试图在Template.body.helpers中创建一个函数来获取数组中的img标签
if (Meteor.isClient) {
Template.body.helpers({
place: function(){
var images = document.getElementsByTagName('img')
console.log(images)
console.log(typeof images)
for(k in images)
console.log(k)
return images
}
}
[]我得到了这个无法访问的对象
对象从typeof
返回控制台(k)显示 长度, 项目,和 namedItem
但如果我使用控制台,我可以获取我的两个图像并使用它们,这与此代码不同...
这是浏览器中的输出 [对象HTMLCollection]
我想做的就是在数组中收集我的图像,然后获取alt标记
[]
0: img.toon
1: img.toon
length: 2
proto: HTMLCollection
这是我从console.log(图像)获得的对象。但如果我尝试图像[0]我得到未定义
感谢您的帮助
所以我添加了一个带有单击事件的按钮来触发相同的代码,我按预期获得了我的图像数组...如果我将原始代码包装在文档onload函数中,它似乎不会运行。< / p>
答案 0 :(得分:0)
实际上,您应该将主代码放在Template.body.onRendered
中,因为您需要等待DOM准备就绪。
如果您尝试收集alt
属性值,则此类内容应该有效:
Template.body.onRendered(function() {
var images = document.getElementsByTagName('img');
var imagesAlts = [];
for (var k = 0; k < images.length; k++) {
imagesAlts.push(images[k].getAttribute('alt'));
}
Session.set('imagesAlts', imagesAlts);
return;
});
Template.body.helpers({
place: function() {
var imagesAlts = Session.get('imagesAlts')
console.log(imagesAlts);
return imagesAlts;
}
});
注意:您可以使用document.images
代替document.getElementsByTagName('img')
。