jquery addClass IE7性能问题

时间:2011-10-17 14:13:00

标签: javascript jquery internet-explorer-7

我只在IE7中遇到一个奇怪的场景,比如 在ID中添加一个类。

$(idName).addClass("sel");

如果我的idName很短,那么我不会遇到任何问题,但如果它很长,那么浏览器就会挂起。

在挂起时,idName就像dateRange(2006,2007,2008,2009,2010)

编辑:

populatedID = "dateRange(2006,2007,2008,2009,2010)";
var idName = "li[id=\"" + populatedID + "\"]";
$(idName).addClass("sel");

请建议我使用它的任何替代方法。

提前致谢。

3 个答案:

答案 0 :(得分:2)

这是一个外观很奇怪的ID,如果它是内联的,则等同于id="dateRange(2006,2007,2008,2009,2010)",因此无效,因为ID只能由字母数字加“ - ”和“_”组成,并以alpha开头

http://www.w3.org/TR/html401/types.html#type-name

答案 1 :(得分:2)

一个可能的问题是您使用的ID不是严格允许的字符。虽然它可能在某些浏览器中有效,但你不能指望它 - 特别是在IE7这样的浏览器中。

作为一项实验,也许你可以尝试修改这些ID,用下划线和连字符替换括号和逗号。

如果您使用ID存储数据,则更好的选择是使用data()功能。生成HTML时,请存储您的日期范围,如下所示:

<li data-daterange="2006,2007,2008,2009">Something</li>

然后创建一个函数来应用这样的样式逻辑:

var highlightYear = function (year) {
  $('#your_ul').find('li').filter( function(){
    return $.inArray( year, $(this).data('daterange').split(',') ) > -1;
  }).addClass('sel');
};

然后使用:

highlightYear( 2006 ); 
// adds "sel" class to all LI elements with "2006" in "daterange"

参考文献:W3C HTML Specification on name and ID tokens

答案 2 :(得分:1)

我从未见过带

的身份证明
(,)

您可以尝试使用字母数字,并用连字符或下划线或camelcase分开吗?