在Greasemonkey / javascript中,如何处理添加到页面的新元素?

时间:2009-08-10 17:11:28

标签: javascript jquery ajax dom greasemonkey

我编写了一个Greasemonkey脚本,它使用以下选择器操作某些元素的内容:

$("span.relativetime").each(function() { $(this).html("TEST"); });

但是,有时匹配元素会通过AJAX添加到页面中,我不知道如何处理这些新元素。我试过这个,但它不起作用:

$("span.relativetime").live(function() { $(this).html("TEST"); });

documentation for jQuery live()表示它想要一个事件(比如“点击”)。但我没有任何事件,我只想知道什么时候匹配我的选择器,然后我想修改它。

背景:我遇到这个问题,使用Greasemonkey脚本将StackOverflow的相对时间戳显示为绝对本地时间戳,you can find on meta-SO。问题是,当您单击“显示所有注释”时,新注释由AJAX添加,我不知道如何查找和替换这些脚本中的时间戳。

2 个答案:

答案 0 :(得分:0)

使用StackOverflow的设置我觉得在评论之后处理内容很烦人。我所做的是在添加/删除注释按钮上放置一个绑定,该按钮使用setTimeout等待创建元素,然后修改它们。

答案 1 :(得分:0)

您可以尝试的一件事(虽然我不确定它是否可行)是将您的选择缓存在某个全局变量中,如下所示:

var $relativetime = $("span.relativetime");

然后你将拥有你的.each功能:

$relativetime.each(function() { $(this).html("TEST"); });

将新元素添加到DOM后,您可以重新选择附加到缓存对象:

$relativetime.append("<my html>"); //or
$("<my html>").appendto($relativetime); 

(P。.html()用于设置html。要设置文字,请使用.text()