2012-07-24 93 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

相關問題