2013-02-11 21 views
0

我通過cors從AJAX獲取HTML響應,響應是一個表格。每個類別都有其標題和子元素。標題名稱相差很大,未來可能會發生變化。每個標題中的子元素幾乎每天都在變化,但DOM結構不會。用於選擇DOM元素的非特定JS

有沒有一種方法可以擺脫這個if語句並將其替換爲不是元素特定的代碼?選擇DOM元素的一些方法我不知道?

Relevat JS

classifiedFilter: function(response) { 
      var Classified = { 
       ClaAdministrative: [], 
       Paraeducator: [], 
       Clerical: [], 
       Custodial: [], 
       NonRep: [], 
       Maintenance: [], 
       ClaSubstitute: [], 
       Coaching: [] 
      }, 
       response = $(response).find("table tbody tr td").html(); 
      $(response).find("#isHeadType").remove(); 
      $(response).find("font:contains(Open to all)").parent().parent().remove(); 

      //Filter each span title and classify sub items 
      $(response).find("span").parents("tr").each(function() { 

       //Find categories and separate by class 
       var rowtext = $(this).find("span").text(), 
        position = ""; 

       position = rowtext.replace(/-/gi, "").replace(/\s/g, ""); 

       $(this).nextAll("tr").addClass(position); 

       //Push content into Classified 
       ((position === "Administrative") ? $(this).nextUntil(".Paraeducator").each(function() { 
        Classified.ClaAdministrative.push($.trim("<tr>" + $(this).html() + "</tr>")); 
       }) : 
       ((position === "Paraeducator") ? $(this).nextUntil(".Clerical").each(function() { 
        Classified.Paraeducator.push($.trim("<tr>" + $(this).html() + "</tr>")); 
       }) : 
       ((position === "Clerical") ? $(this).nextUntil(".Custodial").each(function() { 
        Classified.Clerical.push($.trim("<tr>" + $(this).html() + "</tr>")); 
       }) : 
       ((position === "Custodial") ? $(this).nextUntil(".NonRep").each(function() { 
        Classified.Custodial.push($.trim("<tr>" + $(this).html() + "</tr>")); 
       }) : 
       ((position === "NonRep") ? $(this).nextUntil(".Maintenance").each(function() { 
        Classified.NonRep.push($.trim("<tr>" + $(this).html() + "</tr>")); 
       }) : 
       ((position === "Maintenance") ? $(this).nextUntil(".Substitute").each(function() { 
        Classified.Maintenance.push($.trim("<tr>" + $(this).html() + "</tr>")); 
       }) : 
       ((position === "Substitute") ? $(this).nextUntil(".Coaching").each(function() { 
        Classified.ClaSubstitute.push($.trim("<tr>" + $(this).html() + "</tr>")); 
       }) : 
       ((position === "Coaching") ? $(this).nextAll().each(function() { 
        Classified.Coaching.push($.trim("<tr>" + $(this).html() + "</tr>")); 
       }) : [])))))))); 
      }); 

      //remove title from array 
      Certificated.Elementary.shift(); 
      Certificated.MiddleSchool.shift(); 
      Certificated.HighSchool.shift(); 
      Certificated.K12.shift(); 
      Certificated.Substitute.shift(); 
    } 

彙總HTML GET響應(添加空格對視覺輔助)

<table border="0" cellspacing="0" cellpadding="0" style="MARGIN-TOP: 10px;"> 
    <tr> 
     <td> 
      <font class="HeadTitle">External Positions: Open to all applicants.</font><br> 
     </td> 
    </tr> 






     <tr> 
      <td height="20" nowrap="nowrap"> 
       <i><span id="ExternalJobs__ctl1_BargainGroup" class="BodyText">Administrative</span></i> 
       <br/><br/> 
      </td> 
     </tr> 

       <tr> 
        <td nowrap="nowrap" style="padding-left:20px;" class="BodyText"> 
          <b><a href='jobs.aspx?id=3660&type=2&int=External'>Administrative Assistant I, Health Tech-Leave Replacement-2 hours - ME1214</a></b> 
        </td> 
       </tr> 






     <tr> 
      <td height="20" nowrap="nowrap"> 
       <i><span id="ExternalJobs__ctl2_BargainGroup" class="BodyText">Paraeducator</span></i> 
       <br/><br/> 
      </td> 
     </tr> 

       <tr> 
        <td nowrap="nowrap" style="padding-left:20px;" class="BodyText"> 
          <b><a href='jobs.aspx?id=3544&type=2&int=External'>Paraeducator, SpEd IP/ELL-6.5hours - MC1223</a></b> 
        </td> 
       </tr> 

       <tr> 
        <td nowrap="nowrap" style="padding-left:20px;" class="BodyText"> 
          <b><a href='jobs.aspx?id=3603&type=2&int=External'>Special Ed Paraeducator, School Adjustment Program (SA-)-6.5 hours - MK1215</a></b> 
        </td> 
       </tr> 






     <tr> 
      <td height="20" nowrap="nowrap"> 
       <i><span id="ExternalJobs__ctl3_BargainGroup" class="BodyText">Clerical</span></i> 
       <br/><br/> 
      </td> 
     </tr>    
       <tr> 
        <td nowrap="nowrap" style="padding-left:20px;" class="BodyText"> 
          <b><a href='jobs.aspx?id=3481&type=2&int=External'>Admin Assistant IV-8 hours - IT1209</a></b> 
        </td> 
       </tr> 







     <tr> 
      <td height="20" nowrap="nowrap"> 
       <i><span id="ExternalJobs__ctl5_BargainGroup" class="BodyText">Non-Rep</span></i> 
       <br/><br/> 
      </td> 
     </tr> 

       <tr> 
        <td nowrap="nowrap" style="padding-left:20px;" class="BodyText"> 
          <b><a href='jobs.aspx?id=2732&type=2&int=External'>Licensed Practical Nurse (Pool position) - 2012LPNPool</a></b> 
        </td> 
       </tr> 

       <tr> 
        <td nowrap="nowrap" style="padding-left:20px;" class="BodyText"> 
          <b><a href='jobs.aspx?id=3472&type=2&int=External'>Certified Occupational/Physical Therapist Assistant- POOL - COTA2012Pool</a></b> 
        </td> 
       </tr> 







     <tr> 
      <td height="20" nowrap="nowrap"> 
       <i><span id="ExternalJobs__ctl7_BargainGroup" class="BodyText">Substitute</span></i> 
       <br/><br/> 
      </td> 
     </tr> 

       <tr> 
        <td nowrap="nowrap" style="padding-left:20px;" class="BodyText"> 
          <b><a href='jobs.aspx?id=26&type=2&int=External'>Substitute Food Service Helpers - FSSub</a></b> 
        </td> 
       </tr> 

       <tr> 
        <td nowrap="nowrap" style="padding-left:20px;" class="BodyText"> 
          <b><a href='jobs.aspx?id=28&type=2&int=External'>Substitute Custodians - MTSub</a></b> 
        </td> 
       </tr> 
</table> 

回答

2

這似乎等同於你當前的核心代碼:

$(this).each(function() { 
    Classified[position].push($.trim("<tr>" + $(this).html() + "</tr>")); 
}); 

[編輯]我沒有看到你宣佈你的數組,你實際上可能需要這樣的:

$(this).each(function() { 
    Classified[position]=Classified[position]||[]; 
    Classified[position].push($.trim("<tr>" + $(this).html() + "</tr>")); 
}); 

[更新]基於評論,此循環每當它遇到一個跨度時更新位置

var position = ""; 
$(response).find("tr").each(function() { 
    var currentTR=$(this); 
    // catch span if any 
    var rowtext = currentTR.find("span").text().replace(/-/gi, "").replace(/\s/g, ""); 
    if (rowtext) { 
     position = rowtext; 
     Classified[position]=[]; 
    } 
    // Collect rows 
    Classified[position].push("<tr>" + $.trim($(this).html()) + "</tr>"); 
}); 
+0

我向所討論的代碼添加了數組聲明。 – 2013-02-11 17:07:41

+0

...並且我的代碼是否回答你的問題? – Christophe 2013-02-11 17:43:37

+0

是的,沒有。它將內容推送到數組,但只推送標題元素,用$(this)選擇。它不會選擇和分類每個標題的子元素。如果您注意到HTML中有每個標題元素下的,那麼需要相應地將它們推送到它們的數組中。 – 2013-02-12 15:12:59

0

我想,你可以查找功能使用CSS類名稱,而不是標籤名。

+0

我使用這些標籤,因爲父tr的跨度總是標題tr。這些tr在進入響應時沒有對它們進行分類。也許我沒有跟隨你的想法。你能提供一個例子嗎? – 2013-02-11 16:49:45

+0

對不起,我沒有注意到你無法爲元素添加類。 – dherbolt 2013-02-12 08:29:55