如何使用jquery在运行时创建的div中选择一个锚元素?

时间:2010-09-10 23:51:14

标签: jquery jquery-selectors

我有这个标记:

<body>
    ...
    ...
    <div class="helper">
        <div class="menu-container">
            <ul class="menu">
                <li><a href="#" class="theLink">Link 1</a></li>
                <li><a href="#" class="theLink">Link 2</a></li>
                <li><a href="#" class="theLink">Link 3</a></li>
            </ul>
        </div>
    </div>
</body>

我想用“theLink”类选择所有元素“a”。

请注意,“helper”div以及“menu-container”div 是在运行时创建的,在点击一个锚之后,由另一个jQuery插件创建,所以我想我需要使用jquery的'live'功能。

感谢您的帮助

修改: @everybody回答 请看一下post

基本上我试图将click事件附加到该帖子中具有“contactRole”类的锚点。这些锚点由插件修改。如果您想要真正了解真正需要什么,请阅读所有评论。

请注意,我在这里简化了标记:在昨天的帖子中,class =“theLink”在这里是class =“contactRole”。

谢谢!

5 个答案:

答案 0 :(得分:3)

无需使用.live(),即将事件自动附加到新创建的元素。

$(a.theLink);

将使用类a为您提供theLink类型的所有元素。

答案 1 :(得分:1)

如果你只想选择它们,所有发布的解决方案都会完美运行,但如果你真的想在点击它们时做些什么,试试这个:

$("a.theLink").live("click", function(event){
    //do stuff
    event.preventDefault(); // Prevent default link behaviour
});

<强>更新

我快速阅读插件源代码,我看到一堆.click()处理程序执行return false(第28,211,304行等)。我对.live()函数的使用相当新,但是根据我的理解,正如有人在对你的另一个问题的评论中已经指出的那样,.live()将无法处理已经存在的元素返回.click()的{​​{1}}处理程序。对于此特定插件,我认为 false用于防止重复行为,例如重新打开菜单(如果已经打开),但我可能会离开。

给你一个明确的问题答案很难,主要是因为它需要我知道插件非常好,我显然不会。但是,对于初学者,我会通过注释/删除return false;处理程序中的所有return false;行来修改该插件,并查看哪些内容已修复,哪些内容会被破坏。

请告诉我是否/如何解决这个问题。

答案 2 :(得分:0)

您可以使用

$("a.theLink");

如果您要将事件绑定到这些链接,是的,如果页面在初次重新加载后获取新内容,则必须使用live。

所以,你可以使用:

$("a.theLink").live("click", function(){
    alert("clicked!");
});

答案 3 :(得分:0)

创建它们并不重要,“实时”是完全不同的东西 - 它是事件处理/事件委派的工具,而不是选择器。

$('a.theLink')$('ul.menu a.theLink')或其他任何内容(取决于您是否希望全局查看)都可以正常使用。

答案 4 :(得分:0)

jQuery将在运行时从页面上的任何内容中进行选择。所以它取决于jQuery函数的调用方式/位置。

例如,如果您想在创建后引用这些链接,则只需使用$('a.theLink')$('ul.menu a.theLink')等。

如果您想在创建这些元素之前将事件设置为这些元素,那么您将使用实时。也许下面的内容可以链接到将来创建的当前a.theLink和任何a.theLink

$('a.theLink').live('click', function() {
  // Live handler called.
});

http://api.jquery.com/live/