0

jquerytablesorterプラグインを使用しています

ウェブページはここにあります:http: //redbluffbullsale.com/bulls-listings

以下に定義されている複雑なtextExtraction関数があります。

var jgExtraction = function(node) {
  if (node.childNodes[0].length > 0) {
    return node.childNodes[0].innerHTML;
  } else {
    return node.innerHTML;
  }
}

jQuery('#bullsTable').tablesorter({
  textExtraction: 'jgExtraction',
  headers: {
    0 : {sorter: false},
    13: {sorter: 'digit'},
    14: {sorter: 'digit'}
  }
});

いくつかの列(13および14)には、次の形式のデータがあります。

数字(例:0.9、2.3、4、-2、-2.5など)テキスト(文字I)と数字(I + 2.3、I-0.9、I + 1.4など)と数字付きの記号(+ 2.4、+ 3.1、+ 0.9など)

サーバー上で列データを制御しているので、それが数値または負の数の場合は<td>にダンプされますが、列データにI +、I-、または+がある場合、その列にはI +、I-、または+は、次のように<span>タグで数値から区切られます。

<td>-1.4</td>
<td>I+<span>1.6</span></td>
<td>I-<span>3.4</span></td>
<td>+<span>2.2</span></td>

jgExtractionは、スパンの子ノードがない場合はinnerHTMLを返し、存在する場合はchildNode [0](スパン)のコンテンツを返す必要があります。I+またはI-の列ではソートが機能しません。上記のURLを確認すると、何が問題になっているのかがわかります。

私は何が間違っているのですか?

4

1 に答える 1

2

上記のコードにはいくつかの問題があります。

  • テキスト抽出関数の名前を文字列として追加しないでください

    textExtraction: 'jgExtraction', // wrong
    textExtraction: jgExtraction,   // correct
    
  • 関数内jgExtractionで、最初の項目の長さではなく、子ノードの長さを確認します

    if (node.childNodes[0].length > 0) { // wrong 
    if (node.childNodes.length > 1) {    // correct
    
  • undefinedそのinnerHTMLをチェックすると、テキストノードが返されます。とにかくスパンをターゲットにする必要があります。

    return node.childNodes[0].innerHTML // wrong
    return node.childNodes[1].innerHTML; // target the span
    

これが変更されたコードとデモです:

var jgExtraction = function(node) {
    if (node.childNodes.length > 1) {
        return node.childNodes[1].innerHTML;
    } else {
        return node.innerHTML;
    }
}

興味があれば、私はテーブルソーターのフォークを持っています。これを使用すると、空のテーブルセルを上、下に並べ替えたり、値がゼロとして扱うことができます(デフォルトの動作)-このデモを参照してください

于 2012-11-01T18:47:18.723 に答える