2012-02-26 73 views
4

下面是一个例子使用的什么,我试图做的,:现在和未来的jQuery效果选择没有事件

$('img.switchToPng').each(function(){ 
     currentSRC = $(this).attr('src'); 
     $(this).attr('src', currentSRC.substr(0, currentSRC.length -3) + 'png'); 
    }); 

后来用ajax新<img src="path/image.jpg" alt="blah" class="switchToPng" />出现在DOM中,我想那不需要重新运行选择器和每个功能。随着.on jQuery中的选择器可以活到未来,但是我找不到一个没有事件的方式来使用它。我可以使用一个'load'事件,但这不可靠,因为浏览器缓存可能会阻止这种事件发生。

如果这是可能的,我可以看到很多用途。有没有人知道这个很好的答案?

回答

2

你有三个选择:

  1. 轮询创造新的元素。 [Example]
  2. 修改其插入新元素(jQuery的)方法:

    var originalAppend = jQuery.fn.append; 
    jQuery.fn.append = function() { 
        // Function logic... 
        return originalAppend.apply(this, Array.prototype.slice.call(arguments)); 
    }; 
    
  3. 使用弃用DOM mutation方法。
+0

你能解释一下我的链接吗?我没有遇到过这个概念。 – Fresheyeball 2012-02-26 19:10:08

+0

@Fresheyeball我已经链接了一个例子,带注释的代码。简介:保持一个轮询器(使用'setTimeout'或'setInterval')运行,它检查是否存在匹配某个选择器的元素。当找到这样的元素时,应用一些一次性函数逻辑,并附加一个标识符/标记/(数据)属性,以标记它为“已触摸”。在稍后的调用中,忽略具有此propery/flag设置的元素。由于这是定期运行的,**尽可能避免**昂贵的jQuery,并使用vanilla JavaScript。 – 2012-02-26 19:15:46

+0

轮询的声音真的很重。那种让我希望javascript有这种线程的东西。有推荐的香草JavaScript技术吗?我从jQuery开始,现在只是深入到真正的JavaScript。 – Fresheyeball 2012-02-26 19:22:42