$(document).ready にループがあり、関数を呼び出して要素内のテキストの各スニペットを検索し、それをセレクターとして使用するテキストの配列をチェックします。
このコードは、FF、Chrome、IE9+ などで 100% 動作しますが、IE8 ではブラウザーがフリーズします。
var setText = function(value)
{
if(typeof $('.item_name:contains("'+value+'")') != 'undefined'){
// Do something, it still freezes with nothing set here.
}
}
// In the real script there maybe upwards of 20 items in this array.
var item_list = new Array('a','b','c');
$(document).ready(function()
{
$.each(item_list, function(index, value) {
setText(value);
});
});
setText 関数を無効にしましたが、正常に動作するため、ループではなく、:contains セレクターのようです。
なぜこうなった?他にどうすればこれを行うことができますか? HTMLコード自体を編集できません。
HTML マークアップの一部を jQuery で変更し、HTML を追加し、CSS 値を変更する必要がありますが、一意の識別子は「.item_name」内のテキストだけです。
これが実行されるとフリーズする問題のページには、「.item_name」の最大 3 つの個別のインスタンスが含まれます。検索文字列に応じて、そのいずれかがターゲットになる可能性があります。
jQuery 1.7.1 を使用していますが、これを更新できません。
if($('.item_name:contains("'+value+'")').length > 0){ // Also causes it to freeze.