编辑:帖子底部的解决方案。
我有一个自定义的 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