【发布时间】:2013-01-08 22:08:26
【问题描述】:
我在 $(document) 上有一个循环。准备检查一个文本数组,该数组调用一个函数来搜索元素中的每个 sn-p 文本并将其用作选择器。
此代码在 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 代码本身。
我的想法是我必须使用 jQuery 更改部分 HTML 标记,添加一些 HTML 并更改一些 CSS 值,但我拥有的唯一唯一标识符是 '.item_name' 中的文本。
运行此程序的冻结页面最多包含 3 个单独的“.item_name”实例。根据搜索字符串,其中任何一个都可能成为目标。
我使用的是 jQuery 1.7.1,无法更新。
if($('.item_name:contains("'+value+'")').length > 0){ // Also causes it to freeze.
【问题讨论】:
-
$('.item_name:contains("'+value+'")')返回一个不是undefined的 jQuery 对象。您应该改用length属性。 -
写到最后一行,你的意思是
$('.item_name:contains("'+value+'")').length > 0? -
@undefined,见最后一行,使用 length 也会导致冻结,无论什么是正确的都不能解决它。
-
@Ezra 你还没有使用
length属性!if($('.item_name:contains("'+value+'")').length > 0){ -
@undefined,哎呀..正确。但仍然不影响冻结。将更新我的问题的日期。
标签: jquery internet-explorer loops jquery-selectors internet-explorer-8