ファイルメーカーProのページへ戻る


JavaScriptで、並べ替えを動的に変化させる(2)

データタイプによってソート方法を変える

ソート方法による並び順の違い
文字数値
101
13
210
3
34
4035
41
5
3
5
13
34
41
101
4035

 +COL[0]/DATAという記述で、数値データをソートすると、おかしな結果になります。これは数字を文字として扱うために起きることです(パソコンのファイルをファイル名順に並べるときもこのようなことが起きます)。数字を文字として扱った場合と数値として扱った場合の違いを右の表で例示します。

 データを数値としてソートするには、+number(COL[0]/DATA)という記述をします。そこで、ソートを実行する際に、その要素のデータタイプによってソート方法を使い分けるようにJavaScriptを改良しましょう。

データタイプによってソート方法を使い分けるJavaScript

function sort(sortfld, fldtype) {
 var keyNode = document.XSLDocument.selectSingleNode("*/xsl:template[@match='RESULTSET']//xsl:apply-templates[@select='ROW']/@order-by");
 if(fldtype == "NUMBER") {
  keyNode.value = "+number(COL[" + sortfld + "]/DATA");
 }else{
  keyNode.value = "+COL[" + sortfld + "]/DATA");
 }
 var d = document.XMLDocument.selectSingleNode("FMPXMLRESULT/RESULTSET");
 content.innerHTML = d.transformNode(document.XSLDocument);
}

 sort( )関数を実行する際に、データのタイプも一緒に渡してもらうように引数を一つ増やしました。fldtypeにデータタイプが格納されて、スクリプト中ではif文によって、データタイプが「NUMBER」だった場合とそうでない場合とでorder-by属性の作り方を振り分けます。

(JavaScript)if文
if(評価式){評価式が真のときの命令}else{評価式が偽のときの命令}
>>