Как мне изменить цвет фона , содержащего определенную ссылку?

#javascript #greasemonkey #background-color #tablerow

#javascript #greasemonkey #background-color #tablerow

Вопрос:

Я хочу изменить цвет фона элемента «tr», который содержит данную ссылку.

Мой фрагмент:

 var color1 = "red";
var targetForum = $("tr a[href*='showforum=28']");

targetForum.each ( function () {
    var thisRow = $(this).parent ().parent ().parent ();        
    thisRow.style.backgroundColor = color1;
}
  

Я пробовал значения rgb, а также hex, но с цветом bg ничего не происходит.

Целевая страница выглядит следующим образом:

 <tr>
    <td class="row2" align="center">
    <td class="row1" width="3%" align="center">
    <td class="row1">
    <td class="row1" width="15%">
        <span class="forumdesc">
            <a title="Off-Topic" href="showforum=41">ForumABC</a>
        </span>
    </td>
    <td class="row1" align="center">
    <td class="row2" align="center">
    <td class="row1" align="center">223460</td>
    <td class="row1">
</tr>
  

Комментарии:

1. У вас установлен Firebug? Очень полезно обнаруживать ошибки такого рода.

Ответ №1:

  1. Похоже, вы используете здесь jQuery, как он загружается (с форума или с помощью GM)
  2. Когда jQuery загружается форумом, вы должны получить доступ к jQuery с помощью unsafeWindow.$
  3. parent() возвращает jQuery-объект, вы не можете задать свойство style объекта jQuery с помощью obj.style , используйте css() вместо этого

Я бы предложил это: (вам не нужны все)

 unsafeWindow.$("tr:not(:has(tr)):has(a[href*='showforum=28'])").css('backgroundColor','red');
  

Комментарии:

1.Я знаю, что чего-то не хватает, но почему unsafewWindow.$ ? Прямо сейчас я начинаю сожалеть о том последнем бокале вина … =/

2. Прочитайте это: wiki.greasespot.net/UnsafeWindow . Если вы хотите получить доступ к пользовательским объектам в окне / документе (например, jQuery), вам нужно использовать unsafeWindow, чтобы указать на объект window. На собственные JS / DOM-объекты это ограничение не распространяется

3. Но когда jQuery загружается GM ( wiki.greasespot.net/Third-Party_Libraries ) вам не нужно использовать unsafeWindow

4. Лучше не рекомендовать использование unsafeWindow — за исключением тех немногих случаев, которые требуют использования JS целевой страницы (это не один из них). Это не только «небезопасно», но и приводит к путанице в области видимости / коде и вводит ненужные зависимости.

Ответ №2:

Задайте стиль способом jQuery (как было указано, thisRow это объект jQuery).
Это было бы: thisRow.css ('backgroundColor', color1); .

Однако, если сайт использует фоновое изображение, цвет может не вступить в силу. Использовать:

 thisRow.css ('background', color1);
  

чтобы убедиться, что любое изображение BG не маскирует изменение цвета.

Наконец, сайт может стилизовать BG ячеек таблицы, что может, опять же, замаскировать изменение цвета строки. Чтобы обойти это, также оформите <td> элементы.

Так что это было бы:

 targetForum.each ( function () {
    var thisRow = $(this).parent ().parent ().parent ();        
    thisRow.css ('background', color1);
    thisRow.find ("td").css ('background', color1);
}