特殊的JQuery函数(与GreaseMonkey一起使用)在与之交互之前不会更新

时间:2012-05-23 15:07:51

标签: jquery facebook greasemonkey contains updating

编辑:帖子底部的解决方案。

我有一个自定义的GreaseMonkey脚本,它使用JQuery过滤掉并修改我的Facebook新闻源中的某些Feed项。它工作得很好,但是这个特别的工作不正常:

$("h6.uiStreamHeadline:contains('shared') a[id^='js_']").html("someone else");

这应该做的是替换在我的新闻源上共享特定项目的页面的名称。例如,当它说“John Smith分享Funny-Pictures-For-Everyone的照片”时,这个功能将其变成“John Smith分享别人的照片”。

以下是我的其他一些“过滤器”:

$("h6.uiStreamHeadline:contains('was tagged in')").closest("li").html("<li><i style='color:#CCCCCC;margin-left:15px;'>Post Hidden (someone tagged somewhere else)</i></li>");
    $("h6.uiStreamHeadline:contains('were tagged in')").closest("li").html("<li><i style='color:#CCCCCC;margin-left:15px;'>Post Hidden (multiple friends tagged somewhere else)</i></li>");
    $("h6.uiStreamHeadline:contains('commented on her own')").closest("li").html("<li><i style='color:#CCCCCC;margin-left:15px;'>Post Hidden (someone commented on their own stuff)</i></li>");
    $("h6.uiStreamHeadline:contains('commented on his own')").closest("li").html("<li><i style='color:#CCCCCC;margin-left:15px;'>Post Hidden (someone commented on their own stuff)</i></li>");
    $("h6.uiStreamHeadline .wallArrowIcon").closest("li").html("<li><i style='color:#CCCCCC;margin-left:15px;'>Post Hidden (Wall-to-Wall post)</i></li>");
    $("h6.uiStreamHeadline:contains('commented on a')").closest("li").html("<li><i style='color:#CCCCCC;margin-left:15px;'>Post Hidden (people commenting on something i probably don't care about)</i></li>");

这些都可以正常工作,并在页面加载时进行替换。但是,有问题的功能在我与之交互之前不会更新。例如,如果页面上的名称是“Funny-Pictures-For-Everyone”,在我将鼠标放在它上面并且Facebook的小弹出窗口出现之后,名称将变为“其他人”。我不知道为什么在页面加载时它不会改变。我想知道这是否是一个时间问题,但我不知道该怎么办,而且我不确定为什么其余部分都会有效。

我知道有问题的功能与其他大部分功能略有不同。其余的人使用closest("li")替换整个帖子,而我遇到问题的只是替换其选择的<a></a>代码中的内部HTML或文字。

提前感谢您的帮助。

我想出了一个解决这个问题的解决方案:

正如Brock Adams在下面提到的那样,我试图选择的ID属性在我与元素交互之前不存在。所以,我必须在页面加载时找到一些东西。我检查了它的内部HTML,并发现我想要选择的一个元素是唯一一个没有'class'属性的元素,或者在与它交互之后的OR之前。因此,我提出以下似乎工作得很好的事情:

$("h6.uiStreamHeadline:contains('shared') a:not([class])").html("someone else");

我&lt; 3 JQuery XD

1 个答案:

答案 0 :(得分:1)

问题在于Facebook没有为该链接分配一个id(以及一堆其他的crud),直到你将鼠标悬停在它上面!

解决方案:永远不要使用Facebook!永远! ......呃,我的意思是,为那个过滤器尝试不同的方法。也许:

$("h6.uiStreamHeadline:contains('shared') > div.actorName > a").html("someone else");