2

次の表があります。

<table>
    <tr>
        <th>Alarm</th>
    </tr>
    <tr>
        <td>OK</td>
    </tr>
    <tr>
        <td>Missing</td>
    </tr>
    <tr>
        <td>OK</td>
    </tr>
</table>

このテーブルの行を次のように数えたい
OK = 2
Missing = 1

しかし、jQueryでそれを行う方法がわかりません。他の列にはokとmissingが含まれているため、アラーム列に対してのみセレクターを指定する必要があります

注:テーブル内の特定の列の行をカウントしたいのは、アラーム列のアラーム列に 2 つの ok と 1 つの行が含まれていないためだけです。

4

7 に答える 7

7

Alarmが最初の列であると仮定します。

var okCount = $('td:contains("OK")').filter(function() {
    return $(this).index() == 0;
}).length;
var missingCount = $('td:contains("Missing")').filter(function() {
    return $(this).index() == 0;
}).length;

console.log('okCount: ' + okCount);
console.log('missingCount : ' + missingCount);​

ライブデモ

于 2012-11-20T20:24:47.673 に答える
4

これがうまくいくかどうかを確認してください:http://jsfiddle.net/AG6kr/

var table = document.getElementById('yourTableID'),
    column = 1,
    tr = table.getElementsByTagName('tr'),
    trLen = tr.length,
    numMissing = 0,
    numOK = 0;


while(trLen--) {
    if(tr[trLen].children[column-1].innerHTML == 'OK') {
        numOK++;
    }
    if(tr[trLen].children[column-1].innerHTML == 'Missing') {
        numMissing++;
    }
}

console.log(numOK);
console.log(numMissing);

誰かがjQueryなしでそれを行う方法を知りたい場合に備えて

于 2012-11-20T20:48:50.910 に答える
1

インデックスのフィルターは不要です。n 番目の子セレクターを使用してください。また、私のセレクターは thead と tbody を使用します。OP のコードで使用されている例では失敗します。

HTML

<table>
    <thead>
        <tr>
            <th>Alarm</th>
            <th>Warning</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>OK</td>
            <td>OK</td>    
        </tr>
        <tr>
            <td>Missing</td>
            <td>Missing</td>    
        </tr>
        <tr>
            <td>OK</td>
            <td>OK</td>    
        </tr>
    </thead>
</table>​

JavaScript

var index = $("table thead th:contains('Alarm')").index() + 1;  //index is zero based, nth-child is 1 based.
var cells = $("table tbody td:nth-child(" + index + ")");

var okCount = cells.filter(":contains('OK')").length;
var missingCount = cells.filter(":contains('Missing')").length;

console.log(okCount, missingCount);

JSFミドル

于 2012-11-20T20:47:49.340 に答える
1

誰が jQuery を必要としますか?

var table = document.getElementById('yourTableID'),
    cells = table.getElementsByTagName('td'),
    numCells = cells.length,
    okCount = 0,
    missingCount = 0;

while(numCells--) {
    if (cells[numCells].innerHTML == 'OK') okCount++;
    else if (cells[numCells].innerHTML == 'Missing') missingCount++;
}

console.log('OK: ' + okCount + ', Missing: ' + missingCount);    // Should output "OK: 2, Missing: 1 into the console
于 2012-11-20T20:25:19.973 に答える
0

http://jsfiddle.net/PzBqX/4/

やり過ぎのために、これは、同じテーブル構造があり、任意の列で任意のデータ セットを検索したい場合です。

HTML:

<table>
  <tr>
    <th>Alarm</th>
    <th>Fruit</th>
  </tr><tr>
    <td>OK</td>
    <td>Apple</td>
  </tr><tr>
    <td>Missing</td>
    <td>Orange</td>
  </tr><tr>
    <td>OK</td>
    <td>Apple</td>
  </tr>
</table>​

JavaScript:

$(document).ready(function() {       
    var results = tallyResults($('table'), 'Fruit', Array('Apple', 'Orange'));

    /*
       {
           Apple: 2,
           Orange: 1
       }
    */
});


function tallyResults(table, col, vals) {
    var valsCount = { }
    var columnIndex = null;

    //-- init value object using vals array

    $(vals).each(function(i, v) {
        valsCount[v] = 0;
    });

    //-- get index of the column we are currently searching

    table.find('tr th').each(function(i, v) {
        el = $(this);
        if (el.text() == col) {
            columnIndex = el.index();
        }
    });


    //-- tally all instances of the values we are searching
    //-- for in the proper column index

    table.find('tr td').each(function(i, v) {
        el = $(this);
        if (el.index() == columnIndex) {
           t = el.text();
           if(valsCount[t] != undefined) {
              valsCount[t]++;
           }
        }
    });


    return valsCount;
}
于 2012-11-20T20:31:48.767 に答える
-1

これはあなたが探しているものですか?http://jsfiddle.net/tQTDk/9/

var points = 0;

$("td").each(function() {

    var tdVal = $(this);

    if(tdVal.text().indexOf('OK') >= 0)
       points += 2;


    if(tdVal.text().indexOf('Missing') >= 0)
       points += 1;
});

alert(points);  

</ p>

于 2012-11-20T20:58:45.077 に答える