2017-03-20 2 views
2

私は一般的に動作するhtmlテーブルの動的フィルタを作成しようとしていますが、私は文字列内の一重引用符を移動することができません、私はPHPでaddslashes() )JavaScriptのではなく、何も私はフィルタロジック これは全体のjavascriptのコードを変更する必要がある場合は知っているが、私は問題はselectField変更機能関数内ではないと思います...働かない:javascript/phpで一重引用符を移動する

ここ
$(document).ready(function(){ 
function addRemoveClass(theRows){ 

    theRows.removeClass("odd even"); 
    theRows.filter(":odd").addClass("odd"); 
    theRows.filter(":even").addClass("even"); 

} 

var selVal=''; 

var rows=$('#myTable tbody tr'); 

addRemoveClass(rows); 


$("#selectField").on("change",function() { 
    $('table').show(); 
    var selection = $(this).val(); 
    var dataset = $('#myTable tbody').find('tr'); 
    dataset.show(); 
    // filter the rows that should be hidden 
    if(selection!="All"){ 
     //selection=selection.replace(/'/g, '"'); 
     selection = selection.replace(/'/g, "\\'"); 
     if(selVal==="First_Name"){ 
      dataset.filter(function(index, item) { 
      //return $(item).find('td:nth-child(1)').text().split(',').indexOf(selection) === -1; 
      return $(item).find('td:nth-child(1)').text().indexOf(selection) === -1; 
      }).hide(); 
     } else if(selVal==="Surname"){ 
      dataset.filter(function(index, item) { 
      return $(item).find('td:nth-child(2)').text().indexOf(selection)=== -1; 
      }).hide(); 
     } 
     else if(selVal==="Address"){ 
      dataset.filter(function(index, item) { 
      return $(item).find('td:nth-child(3)').text().indexOf(selection) === -1; 
      }).hide(); 
     }else{ 
      dataset.show(); 
     } 
    } else{ 
     dataset.show();  
    } 
}); 



$("#selectCat").on("change",function(){ 
    var e = document.getElementById("selectCat"); 
    var strUser = e.options[e.selectedIndex].value; 
    selVal=strUser; 
    $("#selectField").empty(); 
    //$("#mytBody tr").empty(); 
    var selected = this.value; 
    if(selected !="NoCategory"){ 
     $.post('process.php', {category:this.value}, function(data) { 
       data = $.parseJSON(data); 

        var al='All' 
        var options = ""; 
         options += "<option value=All selected>All</option>"; 
       $("#selectField").append(options); 

        options = ""; 
        for (var i = 0; i < data.length; i++) {       
         //data[i] = data[i].replace(/'/g, "\\'"); 
         options += "<option value='" + data[i] + "'>" + data[i] + "</option>"; 
         //options += "<option value='" + data[i].toLowercase() + "'>" + data[i] + "</option>"; 
        } 
       $("#selectField").append(options); 
      return false; //prevent from reloading the page 
     }); 

    }else{ 
     rows.show(); 
     addRemoveClass(rows); 
    } 

}); 
}); 

コードですhtmlファイルで私は使用しています:

<head> 
<meta charset="UTF-8"> 
<script type="text/javascript" src="jquery-3.1.0.js"></script> 
<script type="text/javascript" src="filter.js"></script> 
<link rel="stylesheet" type="text/css" href="resultdiffversion.css" /> 
<link rel="stylesheet" type="text/php" href="process.php" /> 
<title> Import data </title> 
</head> 

<body> 
</body> 

        <div class="optionDiv"> 
        Filter by Category 
        <select id="selectCat"> 
         <option value="NoCategory" selected>NoCategory</option> 
         <option value="First_Name">First_Name</option> 
         <option value="Surname">Surname</option> 
         <option value="Address">Address</option> 
        </select> 

        Filter by Selected Category 
         <select id="selectField"> 
          <option value="All" selected>All</option> 

        </select> 
       </div> 
       <table id="myTable"> 

        <thead> 
        <tr id=HeadRow><th>First_Name</th><th>Surname</th><th>Address</th><th>ID</th></tr>      
        </thead> 
       <!--  
        <tr id="HeadRow"> 
         <th>ID</th> 
         <th>First_Name</th> 
         <th>Surname</th> 
         <th>Address</th> 
        </tr> 
       --> 
        <tbody> 

        <tr><td>Michael</td><td>O'Reilly</td><td>581 Beech Street, Lincoln, NE 68506</td><td>246</td></tr><tr><td>Della</td><td>Austin'</td><td>376 Washington Street, Pompano Beach, FL 33060</td><td>247</td></tr><tr><td>Hector</td><td>Hopkins</td><td>442 College Street, East Brunswick, NJ 08816</td><td>248</td></tr><tr><td>Terrance</td><td>Garza'</td><td>737 Route 1, Mahwah, NJ 07430</td><td>249</td></tr><tr><td>Melvin</td><td>Boyd'</td><td>525 Olive Street, Derby, KS 67037</td><td>250</td></tr><tr><td>Kimberly</td><td>Alvarez'</td><td>269 Olive Street, Redondo Beach, CA 90278</td><td>251</td></tr><tr><td>Eleanor</td><td>Steele'</td><td>447 Canal Street, Goose Creek, SC 29445 </td><td>252</td></tr><tr><td>Elsa</td><td>Osborne'</td><td>894 Pheasant Run, Pottstown, PA 19464</td><td>253</td></tr><tr><td>Cameron</td><td>Huff'</td><td>416 Parker Street, Riverdale, GA 30274</td><td>254</td></tr><tr><td>Essie</td><td>Ray'</td><td>539 Devon Court, Woodhaven, NY 11421</td><td>255</td></tr><tr><td>I'Am</td><td>TheBest</td><td>MyStreet 75</td><td>256</td></tr><tr><td>Bilbo</td><td>Baggins</td><td>Shire</td><td>257</td></tr><tr><td>Larry</td><td>I'Connol</td><td>Larrys's Street 45</td><td>258</td></tr><tr><td>Martin</td><td>O'Bannon</td><td>Martins's Street, 56</td><td>259</td></tr> 


、これは私が一重引用符で名前をフィルタ処理しようとすると、名前に単一引用符がO」の後の文字列をカットするので、オライリーのfilter on O'Reilly takes everyone with name starting on "O" because Single quote in name cuts the string after "O" so Index of returns 1 three times

フィルタは、「O」で始まる名前を持つすべての人を取る結果であります"インデックスは3回返す

+0

数でjQueryとHTMLを提供jsfiddleを設定してください。ターゲティングされていない行が含まれます。 'selVal'が条件文で使われる前に決して宣言されていないので、あなたの提供されたコードから何かが間違っているか欠落しています。エラーを複製できるコードで質問を提供しない場合、質問は無視され、下降したり、閉じたりする可能性があります。私たちのお手伝いをしてください。 – mickmackusa

+0

私は単純なボタンだけを含む最初のhtmlファイルを除いて使用しているコードをすべて追加しました – Vlad67

+0

ああ、すべてのPHPとCSSを削除します。あなたは、問題の複製を可能にするために最低限の情報を提供することを意図しています。私はソースコードhtmlとjqueryだけを見たいと思います。あなたの質問を更新してください。 – mickmackusa

答えて

0

jqueryの私のコメントをチェックしてください。ここで

Demo

私はデモで使用されるHTMLである:ここでは

<div class="optionDiv"> 
    Filter by Category 
    <select id="selectCat"> 
     <option value="NoCategory">NoCategory</option> 
     <option value="First_Name">First_Name</option> 
     <option value="Surname" selected>Surname</option> 
     <option value="Address">Address</option> 
    </select> 
    Filter by Selected Category 
    <select id="selectField"> 
     <option value="All" selected>All</option> 
     <option value="O'Reilly">O'Reilly</option> 
    </select> 
</div> 
<table id="myTable"> 
    <thead> 
     <tr id=HeadRow><th>First_Name</th><th>Surname</th><th>Address</th><th>ID</th></tr>      
    </thead> 
    <tbody> 
     <tr><td>Michael</td><td>O'Reilly</td><td>581 Beech Street, Lincoln, NE 68506</td><td>246</td></tr> 
     <tr><td>Della</td><td>Austin'</td><td>376 Washington Street, Pompano Beach, FL 33060</td><td>247</td></tr> 
     <tr><td>Hector</td><td>Hopkins</td><td>442 College Street, East Brunswick, NJ 08816</td><td>248</td></tr> 
     <tr><td>Terrance</td><td>Garza'</td><td>737 Route 1, Mahwah, NJ 07430</td><td>249</td></tr> 
     <tr><td>Melvin</td><td>Boyd'</td><td>525 Olive Street, Derby, KS 67037</td><td>250</td></tr> 
     <tr><td>Kimberly</td><td>Alvarez'</td><td>269 Olive Street, Redondo Beach, CA 90278</td><td>251</td></tr> 
     <tr><td>Eleanor</td><td>Steele'</td><td>447 Canal Street, Goose Creek, SC 29445 </td><td>252</td></tr> 
     <tr><td>Elsa</td><td>Osborne'</td><td>894 Pheasant Run, Pottstown, PA 19464</td><td>253</td></tr> 
     <tr><td>Cameron</td><td>Huff'</td><td>416 Parker Street, Riverdale, GA 30274</td><td>254</td></tr> 
     <tr><td>Essie</td><td>Ray'</td><td>539 Devon Court, Woodhaven, NY 11421</td><td>255</td></tr> 
     <tr><td>I'Am</td><td>TheBest</td><td>MyStreet 75</td><td>256</td></tr> 
     <tr><td>Bilbo</td><td>Baggins</td><td>Shire</td><td>257</td></tr> 
     <tr><td>Larry</td><td>I'Connol</td><td>Larrys's Street 45</td><td>258</td></tr> 
     <tr><td>Martin</td><td>O'Bannon</td><td>Martins's Street, 56</td><td>259</td></tr> 
    </tbody> 
</table> 

はjQueryのです:

function addRemoveClass(theRows){ 
    theRows.removeClass("odd even"); 
    theRows.filter(":odd").addClass("odd"); 
    theRows.filter(":even").addClass("even"); 
} 
var selVal=''; 
var rows=$('#myTable tbody tr'); 
addRemoveClass(rows); 
$("#selectField").on("change",function() { 
    $('table').show(); 
    var selection = $(this).val(); 
    var dataset = $('#myTable tbody').find('tr'); 
    var selVal = $('#selectCat').val(); // Mick added this 
    dataset.show(); 
    // filter the rows that should be hidden 
    if(selVal!="All"){ // Mick added this 
    // if(selection!="All"){ // Mick removed this 
     console.log(selection+' & '+selVal); // Mick added this 
     // Mick says no escaping needed 
     //selection=selection.replace(/'/g, '"'); 
     //selection = selection.replace(/'/g, "\\'"); 
     if(selVal=="Surname"){ 
      dataset.filter(function(index, item) { 
       console.log(index+' & '+item+' & '+selection); // Mick added this 
       return $(item).find('td:nth-child(2)').text().indexOf(selection)=== -1; 
      }).hide(); 
     }else{ 
      dataset.show(); 
     } 
    }else{ 
     dataset.show();  
    } 
}); 
+0

@ Vlad67これで十分に問題が解決すれば、緑のダニ(そしておそらく助けになるためにupvote)。不明な点や間違った点がある場合は、コメントを残してください。私が起きたときに私のコンピュータをチェックします。 – mickmackusa

+0

こんにちは、あなたが投稿したデモで動作しました。私はあなたのデモでコードをコピーし、それも同様に働いた...だから私は問題がおそらくオプションのオプション+ = " "; htmlファイルに送られます。問題は上のステートメントの中で一重引用符で囲まれていたものでした....そうすれば正しくオプション+ = "";今、それはあなたの助けと忍耐のために感謝、私は本当にそれを感謝:) – Vlad67

関連する問題