我尝试修改的内容具有一系列<div>条目,并且在每个<div>条目中还有其他条目。没有id标签可以帮助您。我希望脚本执行的操作是检查每个<div>条目的内容并查找一些文本。这将用于确定整个’‘条目是否被删除/隐藏。这可能吗?怎么样?
<div>
id
下面是一个例子。页面中有几个这样的<div class="foo bar">标签,我想删除/隐藏标签中的文本为“是” 的标签。因此,在此示例中,整个事情将被删除/隐藏。
<div class="foo bar">
<div class="entry"> <div class="fooPhoto"><a href="Addfoo.jsp?tid=954102"><img class="person" src="http://static.barfoo.com/images/site/icons/dude.png" border="0" width="24" height="24" onerror="this.src='images/site/icons/dude.png'" title="Photo Unavailable" alt="Photo Unavailable" ></a></div> <div class="fooAvg">4.7</div> <div class="foo bar">Yes</div> <div class="fooShare"> <a class="shareEmail" href="referral.jsp?sid=882&tid=954102&pgid=3">Share using email</a> </div> </div><!-- closes entry -->
对于此类问题,请发布指向目标页面的链接。或者,如果确实不可能,则将页面保存到pastebin.com并链接到该页面。
无论如何,使用jQuery contains()选择器对您问题的一般 答案并不难。这样的事情会起作用:
// ==UserScript== // @name _Remove annoying divs // @include http://YOUR_SERVER/YOUR_PATH/* // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js // @grant GM_addStyle // ==/UserScript== //- The @grant directive is needed to restore the proper sandbox. /*--- Use the jQuery contains selector to find content to remove. Beware that not all whitespace is as it appears. */ var badDivs = $("div div:contains('Annoying text, CASE SENSITIVE')"); badDivs.remove (); //-- Or use badDivs.hide(); to just hide the content.
更新新澄清的问题/代码:
在您的特定示例中,您将使用以下代码:
var badDivs = $("div.entry div.foo:contains('Yes')"); badDivs.parent ().remove ();
更新注释中指定的站点: 请注意,无需搜索文本,因为该站点方便地为键div提供了isHot或类notHot。
isHot
notHot
// ==UserScript== // @name _Unless they're hot, they're not (shown). // @include http://www.ratemyprofessors.com/SelectTeacher.jsp* // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js // @grant GM_addStyle // ==/UserScript== //- The @grant directive is needed to restore the proper sandbox. var badDivs = $("#ratingTable div.entry").has ("div.notHot"); badDivs.remove ();
使用MutationObserver或waitForKeyElements。(WaitForKeyElements在静态页面上也可以正常工作。)
MutationObserver
waitForKeyElements
这是将上面的脚本重写为AJAX感知的:
// ==UserScript== // @name _Unless they're hot, they're not (shown). // @include http://www.ratemyprofessors.com/SelectTeacher.jsp* // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js // @require https://gist.github.com/raw/2625891/waitForKeyElements.js // @grant GM_addStyle // ==/UserScript== //- The @grant directive is needed to restore the proper sandbox. waitForKeyElements ("#ratingTable div.entry", deleteNotHot); function deleteNotHot (jNode) { if (jNode.has("div.notHot").length) { jNode.remove (); } }