Помогите скрыть теги DIV на основе текстового содержимого с помощью Greasemonkey - PullRequest
3 голосов
/ 03 августа 2011

Я ищу способ написания скрипта Greasemonkey, который будет брать следующий фрагмент кода и отображать только те блоки кода, состоящие из <div class="A", где присутствуют и "passtest", и "State1".

<div class="A">
    <div class="B">
        <a href="/link1">
        <img class="imgClass" src="http://link.com/img.img" title="imgTitle"/>
        </a>
    </div>
    <div class="C">
        <span class="sc1">passtest</span>
        <br/>
        <em class="ec1">City1, State1</em>
    </div>
</div>
<div class="A">
    <div class="B">
        <a href="/link1">
        <img class="imgClass" src="http://link.com/img.img" title="imgTitle"/>
        </a>
    </div>
    <div class="C">
        <span class="sc1">failtest </span>
        <br/>
        <em class="ec1">City1, State1 </em>
    </div>
</div>
<div class="A">
    <div class="B">
        <a href="/link1">
        <img class="imgClass" src="http://link.com/img.img" title="imgTitle"/>
        </a>
    </div>
    <div class="C">
        <span class="sc1">passtest </span>
        <br/>
        <em class="ec1">City2, State2 </em>
    </div>
</div>

Я нашел это из Dive Into Greasemonkey :

var allDivs, thisDiv;
allDivs = document.evaluate("//div[@class='sponsoredlink']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0; i < allDivs.snapshotLength; i++) {
    thisDiv = allDivs.snapshotItem(i); 
    // do something with thisDiv 
}

Я рассматриваю этот код как отправную точку для того, что я хочу сделать. Но я просто пользователь, а не кодер.

Я понимаю логику, которая мне нужна:
Для каждого div, где class = "a", который содержит текст "passtest", а также не содержит "state1", не отображать этот div.

1 Ответ

4 голосов
/ 03 августа 2011

Вот скрипт, который делает это, используя jQuery .Сложнее всего выбрать селекторы .

// ==UserScript==
// @name     Show State1 passes only.
// @include  http://YOUR_SITE/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// ==/UserScript==

$("div.A")  .hide ()
            .has ("span.sc1:contains('passtest')")
            .has ("em.ec1:contains('State1')")
            .show ();

Обратите внимание, что :contains() чувствителен к регистру .

Смотрите код в действии на jsFiddle.

...