我需要对可能通过ajax加载的元素使用removeAttr。有没有办法自动执行此操作,类似于使用live()自动绑定事件的方式?
注意:我无法控制正在执行ajax调用的JavaScript库。
答案 0 :(得分:4)
这为现在和未来的所有元素创建了一个具有“不良属性”的新事件,接下来我们将触发它以触发并完成其工作。
$("mySelector").live("myRemoveAttrEvent", function(event){
$(this).removeAttr("myAttr");
});
关于成功的ajax调用函数
// quick jQ ajax, the important part is on success
$("div").load("url", function(data, status, xhr){
..do work..
// this is the important part
$("mySelector").trigger("myRemoveAttrEvent");
});
如果你无法控制所有ajax,你必须捎带导致ajax触发的用户事件......这很脏: //你认为导致无法控制的ajax发生的事件,例如改变
$("*").change()(function(event){
$("mySelector").trigger("myRemoveAttrEvent");
});
答案 1 :(得分:3)
您可以使用$.ajax
请求的complete
选项,如下所示:
$.ajax({
......
complete:function(){
$('selector').removeAttr('attribute here');
}
});
答案 2 :(得分:2)
您正在寻找的是在加载这些元素时处理此问题,这将在您的AJAX调用的success
回调中进行:
$.ajax({
// your details
success: function(html){
$('a', html).removeAttr('title');
$('body').append(html);
}
});
更新:如果您无法控制进行AJAX调用的任何内容并且它没有提供任何挂钩或回调,那么您将需要找到另一个要绑定的事件。为了执行此操作。根据这些元素插入到页面中的方式以及您正在使用它们的确切方式,您可以像这样使用delegate(只是猜测):
$('body').delegate('p', 'load', function(){ /* remove attr */ });
我不知道在修改DOM或单个元素时触发的任何事件。您可以尝试load
,但我不认为在加载和插入AJAX的情况下会调用它。