gotrain fiddle

by B D

HTML

<table class="gridStatusTrain" cellpadding="0" cellspacing="0">
  <thead>
    <tr>
      <th class="gridStatusWidthOne">Lines</th>
      <th class="gridStatusWidthTwo">Status</th>
    </tr>
  </thead>
  <tbody>
    <tr data-symbol="LW">
      <td class="gridStatusWidthOne">Lakeshore West</td>
      <td class="gridStatusWidthTwo">
        <a class="delayLink" rel="span.messageDisrp" data-geo="data-geo" data-hasqtip="true">Delayed</a>
        <span class="messageDisrp" style="display:none">
      <h3 class="trainD">Lakeshore West</h3>
      <ul class="listTrainD">
      <li class="subtitle"><h4>WESTBOUND</h4></li>
      <li class="odd"><span>Union Station 21:13 - Aldershot GO 22:21<br>Delay of 36m:07s<br>Stopped<br>Equipment problem</span></li>
        <li class="even"><span>Union Station 21:43 - Aldershot GO 22:51<br>Delay of 07m:33s<br>Moving<br>Heavy volume of passengers</span></li>
        <li class="subtitle">
          <h4>EASTBOUND</h4></li>
        <li class="odd"><span>Aldershot GO 21:01 - Union Station 22:10<br>Delay of 09m:20s<br>Moving<br>Wheel slip as a result of track conditions</span></li>
        <li><a class="moreInfoUpdateTamp moreInfoLink" href="http://www.gotransit.com/publicroot/en/updates/servicestatus.aspx?tab=0&amp;routeID=LW">more information</a></li>
        </ul><span class="furtherDetail">More information will be provided for delays greater than 10 minutes.</span></span>
      </td>
    </tr>
    <tr data-symbol="LE">
      <td class="gridStatusWidthOne">Lakeshore East</td>
      <td class="gridStatusWidthTwo"><a class="delayLink" rel="span.messageDisrp" data-geo="data-geo" data-hasqtip="true">Delayed</a><span class="messageDisrp" style="display:none"><h3 class="trainD">Lakeshore East</h3><ul class="listTrainD"><li class="subtitle"><h4>WESTBOUND</h4></li><li class="odd"><span>Oshawa GO 21:11 - Union Station 22:10<br>Delay of 05m:15s<br>Moving</span></li>
        </ul><span class="furtherDetail">More information will be provided for...

JavaScript

var TransitData = {
  transitLine: "", // Default value of properties
  status: "N/A",
  details: {},
  displayType: function() {
    return "Line: " + this.transitLine + " status: " + this.status;
  }
}

var table = $("table.gridStatusTrain tbody");

table.find('tr').each(function(i) {
  var $tds = $(this).find('td'),
    transitLine = $tds.eq(0).text();

  var transitData = Object.create(TransitData);
  transitData.transitLine = transitLine;

  var lineResult = $tds.eq(1);
  if (lineResult.find('a').length == 0) {
    transitData.status = 'On Time';
  } else {
    parseDelay(lineResult, transitData);
  }
  console.log('Row ' + (i + 1) + ':\n' + transitData.displayType());
});

function parseDelay(element, transitData) {
  transitData.status = "Delayed";
  var details = {};
  var currentSubtitle = "";
  element.find("ul.listTrainD li").each(function(i, listElement) {
    var listTxt = listElement.textContent.trim();
    if (listElement.classList.contains("subtitle")) {
      currentSubtitle = listTxt;
      details[listTxt] = "";
    } else {
      debugger;
      details[currentSubtitle] += listTxt.trim() + "\n";
    }
  });
  transitData.details = details;
}