2012-11-22 27 views
0

我正在jQuery中創建表單驗證,但我遇到了一些問題;jQuery元素迭代上下文選擇器

首先我遍歷所有的待驗證的元件並將它們推到一個數組(I已經嘗試了所有下面的):

1. errorfields.push($("#name")); 
2. errorfields.push(document.getElementById("name")); 
3. errorfields.push("name"); 

然後,在結束時,我遍歷這些項目和想添加一條錯誤消息。

for(var i = 0; i < errorfields.length; i++){ 
    1. var parent = errorfields[i]; 
    2. var parent = $(errorfields[i]); 
    3. var parent = $("#" + errorfields[i]); 
} 

而這一切,返回的是:

[<input>, context: #document, selector: "#name"] 

如果我儘量使{}輸入一個jQuery對象,它返回完全相同。

即使我把這樣一行:

console.log($("#name")); 

它將返回該數組與上下文和選擇。可能是什麼問題?

順便說一下,我無法對這個對象執行jquery函數。這是關鍵,看到我想添加一個2像素的紅色邊框和一個$(父母).after(「錯誤信息」);

+0

'[,語境:#document,選擇:「#NAME 「]'是元素的jQuery對象。 – Tetaxa

回答

0

我認爲這應該適合你。

errorfields.push($("#name")[0]); 
//Get the html element rather than the jQuery element (an object). 

內。然後你的循環,你應該有這樣的事情:

var parent = $(errorfields[i]); 
//This will get you the jQuery element again. 

Here is a quick example using divs to show this.

+0

沒問題的隊友,祝你好運! – Undefined

+0

這給了我HTML對象,但是當我嘗試將它包裝在'$()'中以便操作它時,我不能返回一個可以修改的對象,我得到''[,context:]'我不能使用或操縱。 –

+1

所有你需要做的是$(errorFields [i]).addClass('error')' – Undefined

0

$("#name")肯定會返回一個jQuery對象的所有方法。在你的日誌中,我認爲你只注意到owned屬性。如果你查看原型鏈,你會看到所有的$.fn方法。如果#name不存在,則長度將爲0

如果你想一個jQuery對象轉換成一個數組,你應該使用.get()[].slice

var array = $('.example').get(); 

或:

var array = [].slice.call($('.example')); 
+0

更快,更容易使用[0]。 http://stackoverflow.com/questions/4975716/jquery-array-zero-vs-function-get-zero-0-vs-get0 – Undefined

+0

@Sam你說的是通過索引來獲取單個元素。我正在討論將整個對象轉換爲數組。 – ryanve