jQuery / Ajax-选择器不起作用

| 当我使用jQuery.ajax()将来自某些PHP的HTML内容加载到页面上的元素时,jQuery选择器不适用于所加载的HTML中的元素。 这是一个普遍的问题还是我必须举一个例子?
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
    <head>
        <script src=\"../jquery.js\" type=\"text/javascript\"></script> 
</head>
<body>
    <div id=\"htmlcontent\">
        <a href=\"#\">Blah</a><br />
        <a href=\"#\">Bleh</a><br />
    </div>
    <div id=\"replacecontent\">
        <br /><a href=\"#\">Replace content</a>
    </div>
    <script type=\"text/javascript\">
        $(\"#htmlcontent a\").click(function() {
            alert(\"Clicked on a link!\");
        });
        $(\"#replacecontent a\").click(function() {
            $(\"#htmlcontent\").html(\'<a href=\"#\">This doesn\'t alert(). Why?</a>\');
        });         
    </script>
</body>
好吧,这并不难。 :)     
已邀请:
        我确定您的选择器很好。可能是未正确绑定的事件处理程序。您使用的是.bind()还是.click()?一个常见的问题是您无法使用这些标准事件来绑定页面上尚不存在的元素。您可能想研究.live(),它将为现在和将来与当前选择器匹配的所有元素附加一个处理程序到事件。 所以试试这个:
    $(\"#htmlcontent a\").live(\'click\', function() {
        alert(\"Clicked on a link!\");
    });
    
        修改DOM后,选择器将不起作用,因为它们所附加的元素将被操纵或删除。如果要绕过此操作,则必须使用
$.live()
$.delegate()
。 这是“ 4”事件附件的说明:   .live()方法能够影响   尚未添加的元素   通过事件使用到DOM   委托:绑定到   祖先元素负责   其触发的事件   子孙。处理程序传递给   .live()从未绑定到元素;   相反,.live()绑定了一个特殊的   DOM树根的处理程序。     
        绑定“ 5”事件时,您要选择的元素不在DOM中。 看一下jQuery.delegate():基于特定的一组根元素,将处理程序附加到一个或多个与选择器匹配的所有元素的事件中,无论现在还是将来。
    $(\"#replacecontent\").delegate(\"a\", \"click\", function() {
        $(\"#htmlcontent\").html(\'<a href=\"#\">This will work now alert(). Why?</a>\');
    }); 
我更喜欢
.delegate()
而不是
.live()
,因为这样效率更高,这为我们提供了一种为选择器指定上下文的简便方法。如果使用
.live()
,则必须将整个文档上的每次单击与指定的选择器进行比较,而在
$(\"#replacecontent\")
容器中仅需使用
.delegate()
。     

要回复问题请先登录注册