Замяна на упорит CSS с Greasemonkey, за изчислени клетки?

Създавам скрипт Greasemonkey за тази страница .

Това, което бих искал да направя, е да променя всички стойности на спечелените, равенствата и загубените игри към техния процентен резултат и да маркирам клетките (или редовете), които са с процентен резултат, равен или над 70 % за резултати домакинство или гост.

Успях да направя първата част, но имам много проблеми, опитвайки се да маркирам клетка или ред.

Първо опитах този код

$('.teamStandings tbody tr').each(function() {
    $(this).parent().css('backgroundColor', '#EFEF00');
});

Което всъщност избра всички редове; но не можах да видя никаква разлика, докато не деактивирах тази част от кода от CSS чрез Firebug:

.teamStandings tr.rowOne td {
  background-color: #EEEEEE;
}

Така че бих искал да накарам това да работи, заменяйки оригиналния CSS всеки път, когато преглеждам страницата и да работя по по-сложна схема:

$('.teamStandings tbody tr').each(function() {
  var x1=parseInt($cells.eq(8).text(),10) ;
  var x2=parseInt($cells.eq(9).text(),10) ;
  var x3=parseInt($cells.eq(10).text(),10) ;

  var y1=parseInt($cells.eq(11).text(),10) ;
  var y2=parseInt($cells.eq(12).text(),10) ;
  var y3=parseInt($cells.eq(13).text(),10) ;      


  if ((x2/(x1+x2+x3))*100 >= 70) or (y2/(y1+y2+y3))*100 >= 70)
      $(this).parent().css('backgroundColor', '#EFEF00');
});

Което за съжаление изобщо не работи.


person Giacomo Tecya Pigani    schedule 16.01.2013    source източник


Отговори (2)


Има няколко проблема:

  1. Първият кодов блок задава backgroundColor на tbody (многократно), а не всеки ред или клетка.
  2. .teamStandings tr.rowOne td и подобни стилове заместват първия кодов блок, защото имат по-висок < em>Специфичност.
  3. Вторият кодов блок има същия проблем като първия.
    Допълнително:
  4. Той използва $cells без изобщо да го дефинира!
  5. if() има синтактична грешка; or не е валиден оператор.
  6. Използвайте смислени имена на променливи и използвайте променливи вместо "магически числа" (70).

Обединявайки всичко това, този код подчертава клетките Изтеглени, където повече от 70% от игрите са били равенства:

var highlightPercent    = 70;

$('.teamStandings tr').each ( function () {
    var columns     = $(this).find ('td');

    var homeWon     = parseInt (columns.eq( 8).text(), 10) ;
    var homeDraw    = parseInt (columns.eq( 9).text(), 10) ;
    var homeLoss    = parseInt (columns.eq(10).text(), 10) ;

    var awayWon     = parseInt (columns.eq(11).text(), 10) ;
    var awayDraw    = parseInt (columns.eq(12).text(), 10) ;
    var awayLoss    = parseInt (columns.eq(13).text(), 10) ;

    if (homeDraw * 100 / (homeWon + homeDraw + homeLoss)  >= highlightPercent) {
        //-- To highlight the whole row, uncomment the next line.
        //columns.css ('backgroundColor', 'pink');
        columns.eq( 9).css ('backgroundColor', '#EFEF00');
    }

    if (awayDraw * 100 / (awayWon + awayDraw + awayLoss)  >= highlightPercent) {
        //-- To highlight the whole row, uncomment the next line.
        //columns.css ('backgroundColor', 'pink');
        columns.eq(12).css ('backgroundColor', '#EFEF00');
    }
} );

В момента на примерната страница единственият приложимият резултат е Торино, мачове като гост.


PS: Бихте поставили/изпълнили този код преди кода, който преобразува стойности в проценти, за който казахте, че работи и не се показва.

person Brock Adams    schedule 18.01.2013

Във вашия код сте задали background-color за елемента tr.
Докато CSS на страницата задава background-color за елементите td в tr.

Така че трябва да насочвате същите td елементи вместо tr елемент

$('.teamStandings tbody tr td').each(function() {
    $(this).css('backgroundColor', '#EFEF00');
});

Във вашия втори кодов блок

if ((x2/(x1+x2+x3))*100 >= 70) or (y2/(y1+y2+y3))*100 >= 70)

В условието if ключовата дума or правописна грешка ли е?

person Vishal Shah    schedule 16.01.2013
comment
Затворете, но трябва да изтриете частта .parent(). - person Brock Adams; 19.01.2013