如何在尚不存在的 DOM 元素上调用 Jquery 方法?

发布于 2024-11-23 16:54:42 字数 380 浏览 1 评论 0原文

我想使用这个灯箱插件来实现我的页面上尚不存在的一些自动完成链接。

您通常使用以下方式激活它:

$(document).ready(function($) {
  $('a[rel*=facebox]').facebox() 
})

由于页面加载时 a 链接并不全部出现在页面上,因此我通常会查找 .live.delegate 方法来绑定一个事件,但在这种情况下,我将绑定到什么“事件”来表示“一旦此元素位于页面上,则对其调用此方法”。

还是我的处理方式完全错误?

I'd like to use this lightbox plugin for some autocomplete links, that don't yet exist on my page.

You normally activate it using:

$(document).ready(function($) {
  $('a[rel*=facebox]').facebox() 
})

Since the a links aren't all on the page upon page load, I would normally look to the .live or .delegate methods to bind to an event, but in this case, what 'event' would I bind to to say "once this element is on the page, then call this method on it".

Or am I going about this totally the wrong way?

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

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

发布评论

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

评论(4

泪意 2024-11-30 16:54:43

您只需将此调用添加到链接中加载的 ajax 中即可。

You'll need to just add this call to the ajax that loads in the links.

や莫失莫忘 2024-11-30 16:54:42

没有这样的事件。

当您将元素添加到页面时,您需要调用该插件。

   // create a new <a>, append it, and call the plugin against it.
$('<a>',{rel:"facebox"}).appendTo('body').facebox();

此示例创建一个新的 元素。如果您从 AJAX 响应中获取一些元素,请根据这些元素调用它:

var elems = $( response );

elems.filter( 'a[rel="facebox"]' ).facebox(); // if the <a> is at the top level
elems.find( 'a[rel="facebox"]' ).facebox();   // if the <a> is nested

elems.appendTo('body');

There is no such event.

You need to invoke the plugin when you add the elements to the page.

   // create a new <a>, append it, and call the plugin against it.
$('<a>',{rel:"facebox"}).appendTo('body').facebox();

This example creates a new <a> element. If you're getting some elements from an AJAX response, call it against those:

var elems = $( response );

elems.filter( 'a[rel="facebox"]' ).facebox(); // if the <a> is at the top level
elems.find( 'a[rel="facebox"]' ).facebox();   // if the <a> is nested

elems.appendTo('body');
浊酒尽余欢 2024-11-30 16:54:42

尚未测试:

$(document).ready(function($) {
  $(document).bind('change', docChanged) ;
})

function docChanged()
{
    if ($('a[rel*=facebox][class!="faceboxed"]').length > 0)
    {
        $('a[rel*=facebox][class!="faceboxed"]').addClass("faceboxed").facebox();
    }
}

Not yet tested :

$(document).ready(function($) {
  $(document).bind('change', docChanged) ;
})

function docChanged()
{
    if ($('a[rel*=facebox][class!="faceboxed"]').length > 0)
    {
        $('a[rel*=facebox][class!="faceboxed"]').addClass("faceboxed").facebox();
    }
}
听,心雨的声音 2024-11-30 16:54:42

使用 .live 函数完全可以做到这一点。您只需要使用 DOMNodeInserted 事件。

$(document).ready(function() {
    $("a[rel*=facebox]").live("DOMNodeInserted", function() {
        $(this).facebox();
    });
});

This is entirely possible using the .live function. You just need to use the DOMNodeInserted event.

$(document).ready(function() {
    $("a[rel*=facebox]").live("DOMNodeInserted", function() {
        $(this).facebox();
    });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文