要素のリストをフィルタリングするコードを書きました。IEで非常に遅いjQuery
HTML:
<div id="ms-simpleCountries" class="ms-container">
<div class="ms-selectable"><ul><li style="display: none;" ms-value="fr">France</li><li style="display: none;" ms-value="ca">Canada</li><li ms-value="ar">Argentina</li><li ms-value="pt">Portugal</li></ul></div>
<div class="ms-selection"><ul><li ms-value="fr">France</li><li ms-value="ca">Canada</li></ul></div>
</div>
Javascriptを:
function filterAvailable()
{
var filterText = "ca"; // <-- string used to filter
var a_val;
var a_txt;
$('.ms-container .ms-selectable li').each (function() {
// valore elemento disponibile corrente
a_val = $(this).attr('ms-value'); // ca
a_txt = $(this).text(); // canada
// --
if ($('.ms-container .ms-selection [ms-value="' +a_val +'"]').length > 0)
{
$(this).hide();
}
else
{
if ($(this).text().toUpperCase().indexOf(filterText) >= 0)
{
$(this).show();
}
else
{
$(this).hide();
}
}
});//each
}//end
私はクラスのMS-選択」で約500 <李>要素を持つこのJavaScriptコードをテストしました。 私のIE8でこのコードは10000msで動作し、FFでは1000msで動作します! IEでこのタスクを実行するにはどうすればよいですか?
ありがとうございます!
本当に '$(this) 'を何回構築する必要がありますか? jQueryはDOMトラバーサルを超高速にする魔法の弾丸ではありません。あなたのセレクタは、不必要に遅いルートからの検索を続けます。 –