#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:
- Похоже, вы используете здесь jQuery, как он загружается (с форума или с помощью GM)
- Когда jQuery загружается форумом, вы должны получить доступ к jQuery с помощью
unsafeWindow.$
- 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);
}