当过滤器遇到委托时

时间:2013-07-27 02:13:57

标签: jquery

委托需要指定元素和选择器。 我有一个正则表达式过滤器

$(".R, .G").filter(function () {
    return !/.+\.(gif|jpg|png|tiff|svg)$/i.exec($(this).attr("href"));
})

我希望使用delegate绑定使用click()创建的已过滤元素。代码应该是

$(".R, .G").filter(function () {
    return !/.+\.(gif|jpg|png|tiff|svg)$/i.exec($(this).attr("href"));
}).delegate("?", "click", function(){...});

滤出的元素是我想要绑定的。我应该为选择器指定什么? “这个”? “空”?

我无法强调代表与之间的区别。建议的人请尝试区别

$("p").on("click", function () {
    $(this).text("clicked");
});

$("button").click(function () {
    $(this).after($("<p>").text("hellowld;|"))
});

$("body").delegate("p", "click", function () {
    $(this).text("clicked");
});

$("button").click(function () {
    $(this).after($("<p>").text("hellowld;|"))
});

上次修改: 作为nnnnnn,on和delegate是相同的,我想。

经过对所有解决方案的测试后,只有Arun P Johny的解决方案在这里工作。

3 个答案:

答案 0 :(得分:2)

您可能必须编写自定义表达式来过滤它

jQuery.expr[':'].mycustom = function(elem) {
    return !/.+\.(gif|jpg|png|tiff|svg)$/i.exec(elem.href);
};

$(document).delegate('.R:mycustom, .G:mycustom', 'click', function(){
    console.log('clicked', this.href);
    return false;
})

演示:Fiddle

.on()Demo

答案 1 :(得分:1)

编辑: 所以,这里有一个方法,它会为它添加一个类,称为“myClass”,现在你可以使用"myClass"作为on事件,并且应该适用于任何新创建的元素。

$(".R, .G").filter(function () {
        return !/.+\.(gif|jpg|png|tiff|svg)$/i.exec($(this).attr("href"));
    }).addClass("myClass");

$("body").on("click", ".myClass", function(event) {
// Do something...
});

所以,也许这会起作用,也许不会......我不知道,但是如果你为所有匹配的元素添加一个名为myClass的类,它现在应该可以通过类来操作了。您可能希望在函数中触发过滤器代码,并在需要调用该函数时调用该函数以重新填充页面上的“myClass”类元素。

答案 2 :(得分:0)

怎么样?
$(".R, .G").filter(function () {
    return !/.+\.(gif|jpg|png|tiff|svg)$/i.exec($(this).attr("href"));
}).on("click", function(){...});