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