Jquery 单个元素上的FB.XFBML.parse()不执行任何操作
我有一个大页面,底部有一个“加载更多”按钮;每次单击“加载更多”都会通过AJAX加载更多内容。部分内容是类似Facebook的按钮:Jquery 单个元素上的FB.XFBML.parse()不执行任何操作,jquery,each,xfbml,Jquery,Each,Xfbml,我有一个大页面,底部有一个“加载更多”按钮;每次单击“加载更多”都会通过AJAX加载更多内容。部分内容是类似Facebook的按钮: <div class="fb-like" data-href="http://mysite.com/a<?=$x ?>" data-width="100" data-layout="button_count" data-show-faces="false" data-send="false"></div> 没有错误消息,只是不
<div class="fb-like" data-href="http://mysite.com/a<?=$x ?>" data-width="100" data-layout="button_count" data-show-faces="false" data-send="false"></div>
没有错误消息,只是不会产生任何结果。控制台的调试代码看起来很完美,它找到了所有正确的元素
更新
在这个简单的jsfiddle中使用它:
更新2我还尝试将代码从HTML5更改为FBML(以查看差异),这不仅得到了相同的结果,而且现在在ajax调用中只会加载一个额外的按钮,而不是两个。所以情况变得更糟了!您可以在此处使用FBML版本:指定dom元素应为根dom节点,默认为body
。因此,我用创建的DOM元素对.parse
方法的单个调用来替换。这是一本书
注意:FB.XFBML.parse()应该在小部件的父元素上调用,而不是直接在XFBML元素本身上调用。在我的情况下,接受的解决方案不起作用,因为FB post附加在同一个DOM容器中
我最后要做的是,对容器运行一个FB.XFBML.parse(),使用一个.each循环并移除FB post类,添加类facebook post loaded。然后,在随后的Ajax调用和获取新的fb帖子时,fb.XFBML.parse()将不会拾取已加载的元素,因为它们不再具有fb post类。DOM中是否有更高的内容像Facebook API所期望的那样包装.fb?好主意。。。但我不这么认为。即使有,我还是将这个新的HTML附加到一个容器中,这个容器已经有一堆Facebook元素被成功解析。仅供参考,我启动了bounty并添加了JSFIDLE。非常感谢!这完全解决了我的问题。注意:
很关键,答案的顶部会更明显,会节省我几分钟。是的,Facebook文档有点不清楚。注意:这是至关重要的。
// "c" is my container div (a jQuery object, i.e. c = $('#container'); )
// "load more" button
$('#loadmore').click(function() {
$.ajax({
url: "/loadmore.php",
success: function(html) {
if(html) {
// wrap new HTML in special div & append
newDivName = "d"+String(new Date().valueOf());
var $newHtml = $("<div id='"+newDivName+"'>"+html+"</div>");
c.append($newHtml);
// walk through new HTML and get all Facebook "like" buttons and parse them
$('#'+newDivName+' .fb-like').each(function() {
FB.XFBML.parse(this);
});
}
}
});
});
FB.XFBML.parse($newhtml[0]);