0

corsを介してAJAXからHTML応答を取得しましたが、応答はテーブルです。各カテゴリには、タイトルとサブ要素があります。タイトル名はかなり異なり、将来変更される可能性があります。各タイトルのサブ要素はほぼ毎日変更されますが、DOM構造は変更されません。

この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();
    }

要約されたHTMLGET応答(視覚的な補助のためのスペースの追加)

    <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>
4

2 に答える 2

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>" );
});
于 2013-02-11T16:51:37.967 に答える
0

検索関数では、タグ名の代わりにCSSクラス名を使用できると思います。

于 2013-02-11T16:42:27.217 に答える