最近、大学のコース選択ページが機能せず、特定の基準を満たすいくつかのコースを参照するのが難しいため、単純なテーブル フィルタリング Web アプリケーションを開発したいと考えました。したがって、必要な機能のコードをいくつか書きました:)
私は JavaScript を初めて使用します。このフィルタリング Web ページは、JavaScript コードを含む最初の小さなプロジェクトです。もちろん、このプロセスではバージョン 1.8.3 の JQuery を使用しました。
私のページレイアウトは次のとおりです。
機能を備えた4つのフィルター
- コース コード -- 選択すると、AJAX を使用して、元のソースのテーブルがフィルター div の下に取得されます (単なる巨大な
<table>
要素)。 - コース日 -- 選択すると、その日を含まない行が非表示になります。
- コース時間 -- 2 のように。
- 主な制限 -- 問題のあるフィルタは次のとおりです。まず、テーブル構造を見てみましょう。
このスクリーンショットは元のソースからのものです。主要な制限の列がどのように埋められるかがわかったので、フィルターについて話しましょう。
これが私のページのスクリーンショットです:
最初の 3 つの選択は完全に機能します。アイデアを提供するためのjsコードを次に示します。以下は日フィルターです。
$('#gunler').change(function () {
if ($(this).val() != "Seçiniz/Select") { //if an option for gunler (days) is selected
$(".dersprg tr").show(); //show all rows first
applyFilter(); //apply previously selected filters (hours, major restriction)
$(".dersprg tr td:nth-child(6):missing('" + $(this).val() + "')").parent().hide(); //hide row that dont
$(".dersprg td:contains('CRN')").parent().show(); //show the header of the table //contain selected
} //option
else { //if the option is "defaulted"
$(".dersprg td").parent().show(); //show all rows
applyFilter(); //apply previously selected filters
$(".dersprg td:contains('CRN')").parent().show(); //show header of the table
}
});
まあ、主要な制限フィルターは同じ構造を持っていますが、奇妙な出力を生成します。たとえば、ドロップダウンから BLGE を選択すると、フィルターは正常に機能します。ただし、MAT を選択すると、MAT の学生だけに開かれるコースが 1 つあるにもかかわらず、フィルターによってその行も非表示になります。一部の BLG コースについても同様です。主要な制限が「BLG」だけのコースが 3 ~ 4 コースあり、ドロップダウンから BLG を選択すると、他の主要な制限の中で BLG を含む他のコースが表示されますが、主要な制限が BLG のみの行は非表示になっています。すべてを再確認しましたが、どういうわけか誤動作のポイントを見逃しているようです。
奇妙な部分は、私がjsfiddleから同じコードを操作すると、うまく動作することです! これはjsfiddleコードです:
$.expr[':'].missing = function (elem, index, match) {
return (elem.textContent || elem.innerText || Sizzle.getText([elem]) || "").indexOf(match[3]) == -1;
}
$(".dersprg tr").show();
$(".dersprg tr td:nth-child(12):missing('MAT')").parent().hide();
$(".dersprg td:contains('CRN')").parent().show();
HTML コードは、以前に示した元のソースであり、結果は正しくフィルター処理された単一の行です!
ただし、localhost または Web ページでは、コードが期待どおりに機能しません。Google Chrome バージョン 24.0.1312.56 m を使用しています。Mozilla Firefox からもフィルターを確認しましたが、結果は同じでした。
何が問題なのか、どうすれば修正できるのか教えていただけますか?
役に立つと思った追加情報:
という関数を使用しましたapplyFilter()
。これがその本体です。
function applyFilter() {
if ($('#saatler').val() != "Seçiniz/Select") {
$(".dersprg tr:missing('" + $('#saatler').val() + "')").hide();
}
if ($('#bolumler').val() != "Seçiniz/Select") {
$(".dersprg tr:missing('" + $('#bolumler').val() + "')").hide();
}
if ($('#gunler').val() != "Seçiniz/Select") {
$(".dersprg tr:missing('" + $('#gunler').val() + "')").hide();
}
}
主な制限フィルターのオプションを作成する方法は次のとおりです。
<option selected value="Seçiniz/Select">Seçiniz/Select</option>
<?php
$bolumler = str_getcsv(file_get_contents('bolumler.csv'));
foreach ($bolumler as $bolum)
echo '<option value="' . $bolum . '">' . $bolum . '</option>';
?>
</select>
そして「bolumler.csv」の内容
BIO、BIOE、BLG、BLGE、CEV、CEVE、CHZ、CHZE、DEN、DENE、DUIK、EHB、EHBE、ELE、ELH、ELK、ELKE、END、ENDE、EUT、EUTE、FIZ、FIZE、GEM、GEME、 GEMK、GEO、GEOE、GID、GIDE、GMIK、ICM、IML、IMLE、INS、INSE、ISL、ISLE、JDF、JEF、JEFE、JEO、JEOE、KIM、KIME、KMM、KMME、KON、KONE、MAD、 MADE、MAK、MAKE、MAT、MATE、MET、METE、MIM、MIME、MTO、MTOE、PEM、PEME、PET、PETE、SBP、SBPE、TEK、TEKE、TEL、THO、UCK、UCKE、UZB、UZBE