jQuery live()for removeAttr()?

时间:2011-02-03 17:33:02

标签: jquery-selectors jquery

我需要对可能通过ajax加载的元素使用removeAttr。有没有办法自动执行此操作,类似于使用live()自动绑定事件的方式?

注意:我无法控制正在执行ajax调用的JavaScript库。

3 个答案:

答案 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的情况下会调用它。