1

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

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

$("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 并发现我想要选择的一个元素是唯一一个没有“类”属性的元素,无论是在与它交互之前还是之后。因此,我想出了以下似乎工作得很好:

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

我 <3 jQuery XD

4

1 回答 1

1

问题是,直到您将鼠标悬停在该链接上,Facebook 才会为该链接分配一个 ID(和一堆其他杂物)!

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

$("h6.uiStreamHeadline:contains('shared') > div.actorName > a").html("someone else");
于 2012-05-23T21:56:18.537 回答