【问题标题】:jQuery selector to not select dynamic content?jQuery选择器不选择动态内容?
【发布时间】:2018-12-14 17:41:31
【问题描述】:

我需要一个单击事件上的 jQuery 选择器来不针对动态内容。我目前有这个:

$('body:not(.sel)').on('click', function() {

所以这不应该运行.sel类的函数,而是由jQuery动态生成的。

【问题讨论】:

    标签: jquery dynamic selector


    【解决方案1】:

    您当前的选择器正在寻找没有.sel 类的body 元素。我假设您的意思是您要选择 inin 正文中没有 .sel 类的任何内容,在这种情况下,您需要在术语之间留一个空格:

    $('body :not(.sel)').on('click', function() {
      // your logic...  
    });
    

    也就是说,这是搜索整个 DOM 并向每个相关元素添加一个点击处理程序。更好的办法是在 body 上附加一个处理程序,并在事件冒泡时检查目标上的类:

    $('body').on('click', function(e) {
      if (!e.target.classList.contains('sel')) {
        // your logic...  
      }
    });
    

    【讨论】:

    • e.target.classList.contains('sel') 不是类似于$(this).hasClass("sel") 吗?鉴于我们使用的是 jQuery,后者在语法糖方面似乎更好。
    • 类似,但在这种情况下,this 将是 body,而不是单击的元素。如果您愿意,可以使用$(e.target).hasClass('sel')
    • 啊!!!刚看到。你不是……但是为什么呢?您可以直接使用$('.sel').click()$('body').not('.sel').click()...呃...看起来我在毫无根据地问您问题...?
    • 太棒了,您的第二个解决方案效果很好,谢谢 :)
    • @PraveenKumarPurushothaman 因为$('body').not('sel') 正在寻找body 元素,而不是 体内的元素。 $('.sel').click() 也与 OP 想要的相反。
    【解决方案2】:

    您应该使用此代码。

       $("html, body").not('.sel').click(function() {            
            alert('clicked');                        
        });
    

    试试这个代码。

    【讨论】:

    • 我试过这个但是不行,我知道如果html是在初始页面加载后由jquery生成的,那就必须以不同的方式选择。
    • 这仍然在寻找没有sel 类的htmlbody 元素,这没什么意义。
    • 你应该知道 HTML。这里只是一个例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2016-05-05
    • 2023-03-11
    • 2015-05-09
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多