Uncaught TypeError: $(...)[1].prev is not a function問題
阿新 • • 發佈:2018-12-17
其實是:JQuery選擇器得到的元素物件,和JavaScript獲取元素物件 的問題
上面兩張圖是我對 input元素的獲取,使用的兩種方式,pic1用的是原生JS方式,pic2使用的jQuery。
從列印結果可以看出來,第一個返回了我一個節點,而第二返回給我了一個數組。
為什麼說這個問題,是因為我最近在開發中經常碰到.prev() .attr() .find() .css()等jQuery方法無法使用的情況
說明一下:jQuery .prev()獲取同胞元素 目標前面的。
報錯是:.prev() is not a function。
原因是我將jQuery的方法用到了JS物件上。
出現這個錯誤的原因是:
無論是使用ID選擇還是什麼 JQuery得到都是一個數組物件。如上面第二個。
當只是只是唯一物件的時候我們會直接$('#pic1').prev() 使用 沒有問題。
但是當$('.className') 得到了不止一個時,我想呼叫其中的第二個就會 $('.className')[2] 而此時一個JQuery物件被我變成了一個JS 物件,所在當我使用.prev()的時候就報錯,not a function。
解決這個問題的辦法(暫時想到兩個):
一、給你想要獲取的元素加唯一的ID 或className
二、使用.eq()
.eq(n) 就是選第幾個。
$('.className').eq(2).prev();
使用了eq() 後依舊是JQuery物件,所以在使用jq方法不會報錯。