2012-10-25 183 views
0

這可能是一個奇怪的問題。我試圖將兩個數組融合在一起,但讀出的數據將它們顯示爲不同類型的對象。第一種類型,由.serializeArray()jQuery函數聚集正顯示出,因爲這時候我提醒他們:對象之間的區別(javascript和jquery)

[object Object] 

第二,這我是從推每個選項在使用多個JS的方式獲得,顯示了這:

[object HTMLOptionElement] 

這裏是我的代碼如下:

incrCopy(); 
    enableSubmit(); 
    disableReset(); 

    var linkedInArray = []; 
    $('form select option.linked-in').each(function() { 
    linkedInArray.push(this); 
    }) 
    //These alert the second way 

    prevVals = $("form").serializeArray(); 
    //They alert the first way 
    prevVals.push(linkedInArray); 
    alert(prevVals); 

任何人有什麼我失蹤這裏的想法?

+0

好的,我不確定學術上的區別,但是當我在每個循環中調用$(this)而不是'this'時,我意識到這些對象看起來是一樣的。 – streetlight

+1

我正要把它作爲答案。 HTML元素直到用'$()'包裝纔會成爲jQuery對象。' –

+3

'serializeArray'從表單字段中收集值並創建一個對象數組(http://api.jquery.com/serializeArray/ )。 'linkedInArray.push(this);'直接將DOM元素添加到數組中。你只是在做兩件不同的事情。 –

回答

2

這不是jQuery和JavaScript之間的區別。這就是serializeArray的工作原理。它不返回一個HTML元素列表,它返回具有名稱/值屬性的普通舊對象列表。

。例如,如果它找到這樣的事情:

<input name="user[eye_color]" value="brown" /> 
<input name="user[age]" value="47" /> 

它會返回純老對象的數組,看起來像這樣:

[ 
    { 
    name: "user[eye_color]", 
    value: "brown" 
    }, 
    { 
    name: "user[age]", 
    value: 47 
    } 
] 

Conversly,你的第一個循環遍歷一個jQuery選擇器,其中每個元素是某種native HTMLElementHTMLDivElement,HTMLInputElement,HTMLTableElement等)。

相關問題