如何避免重新解析 XFBML 元素?

发布于 2024-10-14 14:22:29 字数 327 浏览 2 评论 0原文

我正在使用 JavaScript Facebook SDK 来解析 xfbml 元素。不过,我也使用ajax分页。这是发生的事情。

我加载元素的第一页,每个元素都包含一个 XFBML 格式的“点赞”按钮和一个评论框。我调用SDK的parse方法来解析元素。

如果用户加载元素的下一页,它们将通过 Ajax 添加到 DOM。但是,当我现在调用解析方法时,第一页的元素会再次解析,这显然是不希望的。

我知道 parse 方法提供了另一个入口根,但由于所有对象都是兄弟姐妹,所以这对我来说不是一个选择。有没有办法告诉解析器只解析他尚未解析的元素?或者我是否必须删除所有已解析的旧 xfbml 标签?

I am using the JavaScript Facebook SDK to parse the xfbml elements. However, I also use ajax pagination. Here is what happens.

I load the first page of elements, which each contain a like button and a comment box in XFBML. I call the parse method of the SDK to parse the elements.

If the user loads the next page of the elements, they get added to the DOM via Ajax. However, when I now call the parse methode, the elements of the first page get parsed again, which is obviously not desired.

I know that the parse method offers a nother entry root, but since all the objects are siblings, this is not an option for me. is there any way to tell the parse to only parse elements he has not parsed yet? or will i have to remove all the old xfbml tags that already have been parsed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半透明的墙 2024-10-21 14:22:29

FB.XFBML.parse() 是唯一可用的函数重新解析 XFBML,您可以将 DOM 元素作为起点传递给它,或者不传递任何内容并让它解析整个 DOM 结构。

由于这些是您唯一的选择,我建议您修改您的 Ajax 调用。与其让 Ajax 调用直接将新元素插入到其最终 DOM 位置(使它们更难重新解析),不如创建一个

(或其他一些元素),加载 Ajax - 将内容提取到其中,然后在将内容移动到适当的位置之前在

上调用 FB.XFBML.parse() ?您可以隐藏

,并使用解析函数的第二个回调参数来执行移动:
//do Ajaxy stuff here to insert new content into hidden div 'foo'

FB.XFBML.parse(document.getElementById('foo'), function() {        
    document.getElementById('yourContent').innerHTML += document.getElementById('foo').innerHTML;
});

我已经有一段时间没有编写 Javascript 了,所以请原谅任何过分的语法,但希望您能得到这个想法。

FB.XFBML.parse() is the only available function for re-parsing XFBML, and you can either pass it a DOM element as a starting point, or pass nothing and have it parse your entire DOM structure.

Since those are your only options, I would suggest that you modify your Ajax call. Instead of having the Ajax call directly insert your new elements into their final DOM location, making them harder to re-parse, why not create a <div> (or some other element), load your Ajax-fetched content into it, and then call FB.XFBML.parse() on the <div> before moving the contents into the appropriate place? You could hide the <div>, and use the second callback parameter of the parse function to do the move:

//do Ajaxy stuff here to insert new content into hidden div 'foo'

FB.XFBML.parse(document.getElementById('foo'), function() {        
    document.getElementById('yourContent').innerHTML += document.getElementById('foo').innerHTML;
});

I haven't done Javascript in awhile, so pardon any egregious syntax, but hopefully you get the idea.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文