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

时间:2011-07-13 21:55:17

标签: javascript jquery javascript-events facebox

我想将this lightbox plugin用于某些自动填充链接,这些链接在我的网页上尚不存在。

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

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

由于页面加载时链接不是全部在页面上,我通常会查看.live或.delegate方法绑定到一个事件,但在这种情况下,我将绑定到什么“事件”说“一旦这个元素在页面上,然后在它上面调用这个方法”。

或者我是否完全以错误的方式解决这个问题?

由于

4 个答案:

答案 0 :(得分:2)

没有这样的事件。

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

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

此示例创建一个新的<a>元素。如果您从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');

答案 1 :(得分:2)

尚未测试:

$(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();
    }
}

答案 2 :(得分:2)

使用.live函数完全可以。您只需要使用DOMNodeInserted事件。

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

答案 3 :(得分:1)

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