Скрипт Greasemonkey для поиска строк с определенными условиями - PullRequest
3 голосов
/ 11 ноября 2011

Я пробовал несколько разных способов найти строки в таблице, где столбцы содержат определенную ссылку.

Моя цель: заменить значок, если ссылка на xyz находится в той же строке, что и изображение.

Пока это мой фрагмент:

var rows = document.getElementsByTagName("tr");
for(var i = rows.length - 1; i >= 0; i--) {     
        var links = rows[i].getElementsByTagName("a");
        for(var k = links.length - k; k >= 0; k--) {
            if (links[k].href =="http://www.XXXX.net/forum/index.php?showforum=121"){
                var images = rows[i].getElementsByTagName("img");
                    for (var j=0;j<images.length;j++) {
                    images[j].src = "http://www.XXXX.net/forum/folder_post_icons/icon7.gif";
                    }
            }
        }
}

Я уверен, что это не самая лучшая концепция.Но, как вы можете видеть, я пытаюсь искать ссылки во всех строках, и как только ссылка на форум "121" найдена, я пытаюсь заменить все изображения в этой конкретной строке.

Я получаю каждое изображение насайт заменяется.

1 Ответ

2 голосов
/ 12 ноября 2011

Поскольку это достаточно просто, вот полный скрипт, который делает это.
Он использует jQuery и вот удобный справочник jQuery . См., В частности, раздел Селекторы (которые почти совпадают с селекторами CSS).

Re: "What I get is every image at the site getting replaced." ...

Это может быть потому, что критерии поиска слишком широки. Если это плохо спроектированная страница (использует макеты таблиц), каждое изображение может быть в строке таблицы с целевой ссылкой!

При публикации вопросов Greasemonkey, ссылка на целевую страницу или, как минимум, публикация достаточного количества HTML-кода страницы, чтобы мы могли настроить сценарий GM таким образом, чтобы он соответствовал.


В любом случае, это будет работать, возможно, в ожидании дополнительной информации о целевой странице:

// ==UserScript==
// @name     _Replace image on custom-targeted row
// @include  http://www.XXXX.net/forum/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// ==/UserScript==

//--- This may need tuning based on information not provided!
var targetLinks = $("tr a[href*='showforum=121']");

//--- Loop through the links and rewrite images that are in the same row.
targetLinks.each ( function () {
    //--- This next assumes that the link is a direct child of tr > td.
    var thisRow = $(this).parent ().parent ();

    //--- This may need tuning based on information not provided!
    var images  = thisRow.find ("td img");

    //--- Replace all target images in the current row.
    images.each ( function () {
        $(this).attr (  
            'src', 
            'http://www.XXXX.net/forum/folder_post_icons/icon7.gif'
        );
    } );
} );
...