Meteor js,body.helper函数getElementsByTagName

时间:2016-02-21 08:19:20

标签: javascript dom meteor

我正在玩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>

1 个答案:

答案 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')