Tampermonkey隐藏没有特定文本的元素?

时间:2016-01-23 11:40:30

标签: javascript html steam tampermonkey

在蒸汽市场上,列表的代码如下:

$value = $ret->src;

使用一些Steam增强器插件,它会将<span id="listing_285218391330225741_name" class="market_listing_item_name" style="color: #CF6A32;">StatTrak™ M4A1-S | Cyrex (Minimal Wear) <span style="color:red"> (warning) </span> </span> 添加到任何带有名称标签的项目中。

由于每个商家信息都有<span style="color:red"> (warning) </span>,是否有一种方法可以使用javascript(Tampermonkey)删除任何不包含&#34;警告&#34 ;?的spans

换句话说,只显示带有名称标签的商品。

2 个答案:

答案 0 :(得分:1)

一般来说:

  1. 获取可能想要删除的所有跨/节点的列表。
  2. 过滤掉包含特定文字的内容。
  3. 删除或隐藏剩下的内容。
  4. 小心AJAX(或插件)计时问题。
  5. 您可以使用jQuery执行第1步到第3步:

    load

    但是,因为警告是通过插件添加的(和/或某些市场页面可能是通过AJAX技术添加的),很可能您的Tampermonkey脚本将在页面之前运行完成你期望/需要它的方式。

    为了弥补这一点,使用像waitForKeyElements()这样的技术,并找到一些条件,你可以知道&#34;插件&#34;你提到的已经完成了它的工作。

    由于您没有提供详细信息,我们将假设插件在窗口// ==UserScript== // @name _Steam Market, hide items that DON't have a warning!? // @include http://YOUR_SERVER.COM/YOUR_PATH/* // @match *://steamcommunity.com/market* // @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 work around a design change introduced in GM/TM 1.0. It restores the sandbox. */ window.addEventListener ("load", function () { waitForKeyElements (".market_listing_row_link", hideUnwarnedRows); }, false); function hideUnwarnedRows (jNode) { if (jNode.has (".market_listing_item_name > span:contains('(warning)')").length) { return; } jNode.hide (); } 事件触发之前完成。

    所以,这里是一个完整的Tampermonkey脚本,可以在AJAX和静态场景中运行(你可能需要根据这个&#34;插件提供额外的延迟&#34;):

    var userExists = _.some(data.location.users, function (user) {
      return user.id === data.activeUser.id;
    });
    

答案 1 :(得分:0)

如果您可以保证警告的范围样式为红色,则可以

var elms = document.querySelectorAll('.market_listing_item_name > span[style="color:red"]');

获得每个警告范围。然后,通过循环遍历所有父母并应用样式来隐藏父母

elms.forEach(function(el){
    el.parentElement.style.display = "hidden";
}