Javascript 将jquery筛选器绑定到不存在的元素

Javascript 将jquery筛选器绑定到不存在的元素,javascript,jquery,Javascript,Jquery,是否可以将jqueryfilter方法绑定到尚不存在的元素?我有一个在页面加载之前没有构建的表,还有一个应该过滤掉行的表行搜索。因为表行也可以添加和删除,所以我需要能够预绑定方法处理程序。范例 class ElementSearch { constructor($input, $elementClass){ let self = this; this.$input = $input; this.$elementClass = $eleme

是否可以将jquery
filter
方法绑定到尚不存在的元素?我有一个在页面加载之前没有构建的表,还有一个应该过滤掉行的表行搜索。因为表行也可以添加和删除,所以我需要能够预绑定方法处理程序。范例

class ElementSearch {

    constructor($input, $elementClass){
        let self = this;
        this.$input = $input;
        this.$elementClass = $elementClass;
        this.$input.on('input', function(){
            self.filterElements($(this).val());
        });

        return this;
    }

    /**
     * Hide or show elements according to the search string
     * @param {string} search 
     * @return ElementSearch
     */
    filterElements(search){
        search = search.toLowerCase();
        let self = this;
        this.$elementClass.filter(function(){ 
            let $this = $(this);
            if($this.text().toLowerCase().indexOf(search) > -1){
                $this.fadeIn();
            }
            else {
                $this.fadeOut();
            }
        });
        return this;
    }
}
在我的
App
中,我甚至在定义或构建表之前创建
ElementSearch
。所以我试试这个

this.elementSearch=newelementsearch($input,$('body table tbody tr')

希望它能对所有
tr
元素调用
filter
,即使它们还不存在。这不起作用(
This.$elementsClass
length=0),但是如果在构建表之后设置它,它就起作用了


有什么方法可以做到这一点吗?

您想探索事件委派

这是将事件处理程序附加到静态父元素的地方。当一个事件冒泡到静态父元素时,处理程序将检查它是否发生在目标子元素上,如果为true,则激发


从您的代码示例中很难看出这一点,因为我看不到html的结构。但使用委托可以保证动态元素由事件绑定不是“活动”的事件处理。

过滤器,不是,因为它不是事件。但是,您可以委托导致过滤器发生的事件。我认为大约有50篇关于jquery动态元素事件处理程序的堆栈溢出帖子。你确定你搜索了它,但没有找到它吗?是的,谢谢@Sagivb.g,但这不是一个jquery事件。HTML结构将生成一个表
..
但是该表甚至还不存在。您可以将该表包装在div中,或者将事件处理程序应用于某个静态父级。理论上,它可以是body标签(最好尽可能靠近目标元素)。事件从单击的任何目标元素一直冒泡到根元素。