2012-07-24 88 views
0
(function(){ 

    var num = parseInt($('body').attr('data-site')) + 1, 
     theul = $(".submenu li:nth-child(" + num + ") a"), 
     newNum = num - 1, 
     theNewUl = $(".submenu li:nth-child(" + newNum + ") a"); 

     console.log(theul); 
     theul.addClass('activex'); 
     console.log(theNewUl); 
     theNewUl.addClass('lastsl'); 

})(); 

您好,当我尝试运行此脚本控制台说:jQuery - 无法识别的表达式:li:nth-​​child?

“未捕获的语法错误,无法识别的表达式:李:第n个孩子”

Althoung我此脚本之前链接jQuery的来源,

感谢anwsers

+1

是'$( '身体')ATTR( '数据网站')'实际上转换为数字。? – 2012-07-24 08:10:07

+1

'console.log(num,“.submenu li:nth-​​child(”+ num +“)a”);' – zerkms 2012-07-24 08:10:23

+1

这可能是由于'num'不是实际的数字,请确保解析是正确的,你实际上有一个号码'num' – Tomer 2012-07-24 08:11:52

回答

3
  1. 你可以赞成.attr("data-foo")使用.data("foo")
  2. 您可以使用the :eq() selector。它基于零,这是你想要的。
  3. 您不需要单独拨打.addClass()
  4. 必须当您使用parseInt()时,请使用基数10,或者08等数字将被解释为八进制。
  5. 您需要确保num实际上包含一个数字,否则parseInt()将返回NaN并且这会破坏您的以下代码。
  6. 包含一个带有$的jQuery对象的前缀变量。这是一个有用的惯例。

尝试:

var num = parseInt($('body').data("site"), 10), 
    $theul = $(".submenu li:eq(" + num + ") a").addClass('activex'), 
    $theNewUl = $(".submenu li:eq(" + (num-1) + ") a").addClass('lastsl'); 
+2

值得注意的是':eq'和':nth-​​child'是非常不同的东西。他们的文档强调了“nth-child”基于1的事实,但更重要的是它的功能不同:“nth-child”检索父母的第n个孩子的任何元素。这可以是几个元素,具体取决于您的选择器。 'eq'在你选择的索引处检索单个元素。 – Barney 2013-04-09 16:41:32

相关问题