2012-01-14 79 views
2

我已经注意到DOMSubtreeModified事件已被弃用(这是一个令人伤心的消息),但我想知道是否有办法检测页面上每一个标签的变化(我知道 - 这可能非常昂贵,但它有它的目的)。基本上,我想知道每当一个<a>标记(节点)被创建/修改,所以我可以快速扫描它的.href并查看它是否匹配我正在寻找的模式(如果是,我想重定向它运行我的JS(与此无关)而不是导航到所述链接)。我需要这是通用的(我不知道ID/DIV /除了它们是<a href> s,并且它们具有我正在寻找的特定URL模式。)仅限于<a>标记的DOMSubtreeModified事件(和/或替换)?

我知道对此的支持甚至是但现在它只能用作Chrome扩展(Firefox即将推出,所以我不得不去鼓捣它),所以现在应该可以。

让我知道是否有额外的问题,谢谢!

+1

为什么你会听到修改,当你稍后可以捕获点击?如果这是你感兴趣的行为,那么改变行为而不是徘徊,不做任何事情。 – Sinetheta 2012-01-14 02:07:17

+0

我是一种jQuery noob(几年以来没有玩过它)......有没有一种方法可以在导航之前捕获特定标签上的点击?有没有办法只对那些符合我要找的模式的人做? – 2012-01-14 02:22:00

回答

0

你能赶上链接操作,当它发生,而不是什么是你正在寻找的模式呢?这只是一个“选择”的权利<a> S的问题。jQuery有属性selectors˚F或者几乎任何场合, “打头”, “含有”, “等于”, “结尾”,等等

$('a[href="http://notHere.com"]').on('click',function(event){ 
    alert("omg don't go there!"); 
    //window.location="http://www.goHere.com"; 
    event.preventDefault(); 
}); 

jsFiddle

按照评论:

如果您的页面将被动态更改,您需要将事件绑定委托给一定会始终存在的事物,并包含您的目标。

$('body').on('click','a[href="http://notHere.com"]',function(event){ 
    alert("omg don't go there!"); 
    //window.location="http://www.goHere.com"; 
    event.preventDefault(); 
}); 

这给<body>单击处理程序,并从那里手表上的适当锚点击。如果你可以靠得更近,那么去吧,例如:$('#mainContent')

+0

所有gCal邀请链接都以'http://www.google.com/calendar/event?action = TEMPLATE'开始,后跟描述事件的分隔列表属性。 我写了一个小小的JS脚本来登录到你的gCal,并检查你是否可以在那段时间/提供将它添加到你的日历中,这样你就不必去查看日历上的时间段。这是一个课程项目,并托管在一个特定的网站上,但我想使它成为一个Chrome扩展,所以它可以在任何你浏览的页面上工作:D – 2012-01-14 02:52:45

+0

我也有计划在它上面加上优先级因此,如果您的“空闲时间”日历上有一个事件,并且新事件位于“工作义务”日历上,则可以将其配置为自动删除旧事件并添加新事件。像这样的东西。这是非常漂亮的独立,但我一直试图让它作为一段时间的扩展工作,其中一部分是能够嗅探任何适当的链接 – 2012-01-14 02:55:55

+0

我发现这里有一个问题:什么是可能的是,如果我的脚本加载后发生DOM更改(即生成链接),但这不会引起点击(请参阅:[link](http://www.google.com/googlecalendar/event_publisher_guide.html#toc-individual))) 。如果您使用该表单生成HTML,那么我的JS(在页面/标签加载时注入)不会捕获该事件。如果您更改标签并返回,它会按预期工作。 – 2012-01-15 01:43:55