如何委托这个过滤后的jquery对象

如何委托这个过滤后的jquery对象,jquery,Jquery,我从一个过滤器调用中返回了这个JQuery对象,我给它附加了一个事件,就像这样 visibleCascadeParentCheckbox = $('.checkbox[data-cascade]:not(.hidden)').filter(function(){ return !$(this).parents('td').hasClass('nested') }); $(visibleCascadeParentCheckbox).on('change', functio

我从一个过滤器调用中返回了这个JQuery对象,我给它附加了一个事件,就像这样

  visibleCascadeParentCheckbox = $('.checkbox[data-cascade]:not(.hidden)').filter(function(){
      return !$(this).parents('td').hasClass('nested')
  });

  $(visibleCascadeParentCheckbox).on('change', function() {...});
但我需要这样做

 $('.table').on('click', ****selector from visibleCascadeParentCheckbox****, function() {..});

您可以循环遍历
visibleCascadeParentCheckbox
数组中的每个元素,并获取每个元素的类字符串。然后,您可以使用该字符串,用逗号和句点替换空格以选择下一个类,依此类推。我们在委托点处切片以删除第一个逗号

var classes = "";
visibleCascadeParentCheckbox.forEach(function(checkbox) {
    classes = classes + ',.' + $(checkbox).prop('class').replace(' ', ',.');
});

$('.table').on('click', classes.slice(1), function() {..});

您可以循环遍历
visibleCascadeParentCheckbox
数组中的每个元素,并获取每个元素的类字符串。然后,您可以使用该字符串,用逗号和句点替换空格以选择下一个类,依此类推。我们在委托点处切片以删除第一个逗号

var classes = "";
visibleCascadeParentCheckbox.forEach(function(checkbox) {
    classes = classes + ',.' + $(checkbox).prop('class').replace(' ', ',.');
});

$('.table').on('click', classes.slice(1), function() {..});

假设您的元素有一个类,例如“someClass”,那么您可以:

将数据添加到dom并添加以下代码:

$('.table').on('click', ".someClass", function() {..});

假设您的元素有一个类,例如“someClass”,那么您可以:

将数据添加到dom并添加以下代码:

$('.table').on('click', ".someClass", function() {..});

您需要在事件处理程序中执行筛选器检查:

$('.table').on('click', '.checkbox[data-cascade]:not(.hidden)', function() {
    if ($(this).parents('td').hasClass('nested')) return; // exit!
    // your code...
});

注意:重用您的visibleCascadeParentCheckbox选择没有用,因为表可能已更改,使选择过时。您不会从事件委派的更动态的特性中获益。

您需要在事件处理程序中执行筛选器检查:

$('.table').on('click', '.checkbox[data-cascade]:not(.hidden)', function() {
    if ($(this).parents('td').hasClass('nested')) return; // exit!
    // your code...
});

注意:重用您的visibleCascadeParentCheckbox选择没有用,因为表可能已更改,使选择过时。您不会从事件委派的更具动态性中获益。

visibleCascadeParentCheckbox中的每个元素是否可能需要不同的选择器?或者这仅仅是最后一个元素?我不确定你的意思。我很困惑,因为我不确定
VisibleCascadeParentCheckbox
是否可以返回选择器。这是一个复选框列表,可用于将事件附加到事件委托,但不适用于事件委托。visibleCascadeParentCheckbox中的每个元素是否可能需要不同的选择器?或者这仅仅是最后一个元素?我不确定你的意思。我很困惑,因为我不确定
VisibleCascadeParentCheckbox
是否可以返回选择器。这是一个复选框列表,可以将事件附加到事件委托,但不适用于事件委托。这只是将问题转移到如何根据问题中指定的特定条件管理该类的添加和删除。如果没有关于如何执行的规范,这并不是问题的真正答案。感谢您的建议,它本可以工作,但我无法通过这种方式在代码中插入新类而不破坏它,因为我从隐藏表中克隆了它……因此我需要基于父级进行筛选。@trincot我不同意这一点。OP询问他如何绑定和委派事件。我提供了一个带有修改条件的答案,但答案仍然与问题相关。@Phil,希望您对可能的替代解决方案有不同的看法,很高兴我能提供帮助:)这只是将问题转移到如何根据问题中指定的特定条件管理该类的添加和删除。如果没有关于如何执行的规范,这并不是问题的真正答案。感谢您的建议,它本可以工作,但我无法通过这种方式在代码中插入新类而不破坏它,因为我从隐藏表中克隆了它……因此我需要基于父级进行筛选。@trincot我不同意这一点。OP询问他如何绑定和委派事件。我提供了一个带有修改条件的答案,但答案仍然与问题相关。@Phil,希望您对可能的替代解决方案有不同的看法,很高兴我能提供帮助:)这并没有给出期望的行为。这些元素上可能还有其他类与被选择与否无关,但您需要考虑所有这些类。此外,这没有考虑到将来可能添加/删除嵌套的类(参见问题中的筛选条件)。这没有给出所需的行为。这些元素上可能还有其他类与被选择与否无关,但您需要考虑所有这些类。此外,这没有考虑到将来可能添加/删除嵌套的
类(参见问题中的筛选条件)。啊,谢谢!这很有道理。我很困惑,因为我认为我必须在一个回调中进行回调,但你已经非常简单和清楚地说明了,我只是将它们组合成一个回调!啊,谢谢!这很有道理。我很困惑,因为我认为我必须在一个回调中进行回调,但你已经非常简单和清楚地说明了,我只是将它们组合成一个回调!