jquery发现只返回一个元素(在Meteor中)

我有以下链接,点击时应显示fancyboxes – 使用jquery插件: http : //fancyapps.com/fancybox/

 

我遇到的问题是fancybox只适用于第一个链接。 在meteor中,我有:

 Template.mytemplate.rendered = function () { console.log($(this.find('a.popup-link'))); $(this.find('a.popup-link')).fancybox({ padding: 18, openMethod: 'changeIn', closeBtn : false, beforeShow: function() { $('input:checkbox').ezMark(); $('select').selectbox(); $('.trigger-ajax').on('click', function(e) { e.preventDefault() $('.fancybox-wrap').animate({ 'left': '-100%'}, 400, function() { $(this).parent().find('.popup-link').trigger('click'); }) }) } }); } 

当我点击第一个链接时,我的fancybox按预期加载,但是当我点击第二个链接时没有任何反应。

通过console.log它还清楚find只返回第一个元素…因此问题。

请注意,如果我只是在没有find情况下执行('a.popup-link')

这是怎么回事? 谢谢!

如果您尝试使用Meteor模板方法(而不是jQuery find()方法),请使用this.findAll('a.popup-link')而不是this.find('a.popup-link') )。

但是, findAll()返回一个DOM元素数组,我不确定$()是否接受它作为参数。 如果不是这样,你可以循环遍历数组的元素。

我想你正在使用不同的find方法。 使用:

 $(this).find('a.popup-link').fancybox({ 

我不确定this.find('a.popup-link')是如何工作的,但我想这取决于thisfind是什么/做了什么。 要使用jQuery方法find ,您需要一个jQuery对象。 这就是$(this)作用。 从那里,你可以找到带有find的“a.popup-link”后代。