Je suis Newbie à JQuery. J'ai ci-dessous HTML:
p>
<script>
function testFilter(){
$(".filter").change(function() {
var filterValue = $(this).val();
var row = $('.record');
console.log(filterValue);
row.hide()
row.each(function(i, el) {
if($(el).children().innerHTML == filterValue) {
$(el).show();
}
})
});
}
</script>
3 Réponses :
Quelques modifications apportées à votre code.
Pour rendre votre filtrage meilleur, vous devez garder des valeurs de sélection de DDL à la même manière que les valeurs de table (.store). P>
p> Royaume-Uni ! = united_kingdom code> p> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="search-button">
<label for="filter">Store Name:</label>
<select class="filter" data-tableId="table1" onchange="testFilter(this)">
<option value="all">All Stores</option>
<option value="United Kingdom">United Kingdom</option>
<option value="United States">United States</option>
<option value="France">France</option>
<option value="Denmark">Denmark</option>
<option value="Ireland">Ireland</option>
</select>
</div>
<div id="recordContent">
<table id="orderTable">
<tbody>
<tr>
<th>Store Name</th>
<th>Language Code</th>
<th>Testcase Name</th>
<th>Order Id</th>
<th>Order Total</th>
<th>Order Date</th>
</tr>
<tr class="record">
<td class="store">ireland</td>
<td class="langCode">en_IE</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">4001820209</td>
<td class="orderTotal">19.98</td>
<td class="orderDate">12-02-2019 15:37:30.201</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">denmark</td>
<td class="langCode">en_DK</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">6001825084</td>
<td class="orderTotal">338 DKK</td>
<td class="orderDate">12-02-2019 15:37:35.140</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">united_kingdom</td>
<td class="langCode">en_GB</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">7002541022</td>
<td class="orderTotal">13.04</td>
<td class="orderDate">12-02-2019 15:45:08.038</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">united_states</td>
<td class="langCode">en_US</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">2001741036</td>
<td class="orderTotal">69.90</td>
<td class="orderDate">12-02-2019 15:46:33.310</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">united_kingdom</td>
<td class="langCode">en_GB</td>
<td class="tcName">Registered User Checkout - Paypal</td>
<td class="orderID">7002541028</td>
<td class="orderTotal">8.14</td>
<td class="orderDate">12-02-2019 15:50:04.713</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">united_states</td>
<td class="langCode">en_US</td>
<td class="tcName">Registered User Checkout - Paypal</td>
<td class="orderID">2001741030</td>
<td class="orderTotal">15.98</td>
<td class="orderDate">12-02-2019 15:51:23.551</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">france</td>
<td class="langCode">en_FR</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">11002001160</td>
<td class="orderTotal">35.44</td>
<td class="orderDate">12-02-2019 15:53:45.130</td>
</tr>
<tr></tr>
</tbody>
</table>
</div>
Soulignore vs espaces
@epascarello Ouais, je l'obtiens mais j'ai oublié de le mentionner. Quoi qu'il en soit mis à jour ma réponse, merci de rappeler.
Ceci est dû au fait que les valeurs des options de sélection ne correspondent pas aux champs du tableau. J'ai fait peu d'améliorations dans votre code JS:
// I removed onchange property of your select
// because change event is already attached in this code
$(".filter").change(function() {
var translatedFilterValue = getTranslatedFilterValue($(this).val());
var rows = $('.record');
rows.each(function(i, el) {
if(translatedFilterValue == 'all' || ($(el).find('.store').text() == translatedFilterValue)) {
$(el).show();
} else {
$(el).hide();
}
})
});
//
// Translates text from select to corresponding values in table
// for example: from "United States" to "united_states"
//
function getTranslatedFilterValue(filterValue) {
filterValue = filterValue.toLowerCase();
return filterValue.replace(' ', '_');
}
Pourquoi la conversion des chaînes sur chaque itération? Rend la boucle inefficace
@epascarello, tu as totalement raison! J'ai mis à jour ma réponse et mon violon. Merci :)
Vous ne devez pas avoir d'événement d'ONCHANGE en ligne et que vous lierez à cet élément avec jQuery à l'intérieur. p> Le code est commenté. p> p> $ (el) .children (). innerhtml code> regarde tout le texte de la ligne entière. Cela ne correspond pas à votre chaîne. Une autre valeur d'émission a des capuchons, les valeurs de la table ne le font pas. Il y a un soulignement et les valeurs ne le font pas. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="search-button">
<label for="filter">Store Name:</label>
<select class="filter" data-tableId="table1">
<option value="all">All Stores</option>
<option value="United Kingdom">United Kingdom</option>
<option value="United States">United States</option>
<option value="France">France</option>
<option value="Denmark">Denmark</option>
<option value="Ireland">Ireland</option>
</select>
</div>
<div id="recordContent">
<table id="orderTable">
<tbody>
<tr>
<th>Store Name</th>
<th>Language Code</th>
<th>Testcase Name</th>
<th>Order Id</th>
<th>Order Total</th>
<th>Order Date</th>
</tr>
<tr class="record">
<td class="store">ireland</td>
<td class="langCode">en_IE</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">4001820209</td>
<td class="orderTotal">19.98</td>
<td class="orderDate">12-02-2019 15:37:30.201</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">denmark</td>
<td class="langCode">en_DK</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">6001825084</td>
<td class="orderTotal">338 DKK</td>
<td class="orderDate">12-02-2019 15:37:35.140</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">united_kingdom</td>
<td class="langCode">en_GB</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">7002541022</td>
<td class="orderTotal">13.04</td>
<td class="orderDate">12-02-2019 15:45:08.038</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">united_states</td>
<td class="langCode">en_US</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">2001741036</td>
<td class="orderTotal">69.90</td>
<td class="orderDate">12-02-2019 15:46:33.310</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">united_kingdom</td>
<td class="langCode">en_GB</td>
<td class="tcName">Registered User Checkout - Paypal</td>
<td class="orderID">7002541028</td>
<td class="orderTotal">8.14</td>
<td class="orderDate">12-02-2019 15:50:04.713</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">united_states</td>
<td class="langCode">en_US</td>
<td class="tcName">Registered User Checkout - Paypal</td>
<td class="orderID">2001741030</td>
<td class="orderTotal">15.98</td>
<td class="orderDate">12-02-2019 15:51:23.551</td>
</tr>
<tr></tr>
<tr class="record">
<td class="store">france</td>
<td class="langCode">en_FR</td>
<td class="tcName">Guest User Checkout - Credit Card</td>
<td class="orderID">11002001160</td>
<td class="orderTotal">35.44</td>
<td class="orderDate">12-02-2019 15:53:45.130</td>
</tr>
<tr></tr>
</tbody>
</table>
</div>