2012-01-11 7 views
1

テーブルプロバイダJqueryプラグインを使用して、列をクリックしてHTMLテーブルの行を並べ替える。ほとんどの場合、テーブルセルには<td>hello</td>のような簡単なマークアップが含まれているため、デフォルトの動作は正常に動作します。マークアップを含む列別にテーブルの並べ替えを行う

しかしながら、表の1列は、(上記のように)この

<td> 
    <a id="1" class="festivalSubscribe " action="create" 
    controller="festivalSubscription" onclick="/* Lots of Javascript */">Not Subscribed 
    </a> 

    <a id="1" class="festivalUnsubscribe hide" action="delete" 
    controller="festivalSubscription" onclick="/* Lots of JavaScript */">Subscribed 
    </a> 
</td> 

この列の各セルは、2つのリンクが含まれている様細胞、常に目に見えないであろうそのうちの一つを含んでいる(hideクラスを有するもの) 。この列を表示リンクテキスト(「購読していません」または「購読済み」)でソートしたいとします。

プラグインは、a functionを定義するamオプションを提供します。その結果は、列のソート方法の決定に使用されます。

textExtraction: function(node) { 
    // extract data from markup and return it 
    return node.childNodes[0].childNodes[0].innerHTML; 
} 

しかし、私はそれが正しく簡単なケース<td>hello</td>と上記より複雑なケースを並べ替えられますように、この関数を定義する方法を見つけることができません。

+0

おそらく.innerTextなので、実際のテキストコンテンツのみを取得し、タグは取得しません。 –

+0

私が欲しいのは 'hide'クラスのメンバーではないリンクのテキストですが、JQueryでそれを表現する方法はわかりません –

+0

最新のブラウザでは' node.textContent'を使うことができます古いブラウザでは 'node.innerText'を使う必要があります。 –

答えて

2

はこれを試してみてください、それが子供を持つことの両方のケースを処理する必要があります子要素を持たない要素:

textExtraction: function(node) { 
    // extract data from markup and return it 
    var $node_a = $(node).find("a"); 
    if ($node_a.length) { 
    return $node_a.filter(":visible").text(); 
    } 
    // normal case 
    return node.innerHTML; 
} 
0

はこれを試してみてください:

textExtraction: function(node) { 
    return $('td :not(.hide)', node).text(); 
} 
0

あなたはノード内で最初に見つかった目に見える要素を取得し、これを使用して、それからテキストを抽出することができます。

$(node).find(':visible:eq(0)').text(); 
2

私は@Kevin Bの答えがoriにとって最適だと思いますginalプラグインを追加したいのですが、元のプラグインのコピーをgithubにフォークし、カラムを指定できるようにするためにtextExtractionオプションに機能を追加しました。これは可能です。

$("table").tablesorter({ 

    // Define a custom text extraction function for each column 
    // default extraction is obtained like this: `$(node).text()` 
    textExtraction: { 
    0: function(node) { 
     return $(node).find("a:visible").text(); 
    } 
    } 
}); 
+0

これはすばらしい改善です。私はこの機能がオリジナルでは利用できなかったことに驚いた。 –

関連する問題