2011-11-28 50 views
12

我希望遍歷一個表單,將每個元素添加到一個區域。問題是這些元素中的一些是選擇,輸入和文本框。我知道我可以使用:input來解決這裏的問題(儘管我並不需要)。問題是,我無法確定如何查看元素是否爲textarea,輸入,選擇等。我需要正確執行此操作,因爲據我所知,jQuery("input#someinput").val()對輸入非常有用,但對於textarea我可能需要jQuery("textarea#sometexarea").text()。我不知道如果存在的話......在jQuery中確定輸入與文本區域

總之,這裏是我的功能至今:

function getAllFormElements(id) { 

    var elements = new Array(); 

    jQuery(id).children().map(function(){ 

     for (var index = 0; index < children.length; index++) { 

      elements[i] = jQuery(children[i]).val(); 

     } 

    }) 

     return elements; 
} 

回答

46

val()效果一樣好<input><select><textarea>元素。

如果你還是想確定實際類型由:input選擇匹配的元素,你可以使用is()element selectors

$(":input").each(function() { 
    var $this = $(this); 
    if ($this.is("input")) { 
     // <input> element. 
    } else if ($this.is("select")) { 
     // <select> element. 
    } else if ($this.is("textarea")) { 
     // <textarea> element. 
    } 
}); 
+0

完美。正是我需要的。謝謝。 – zeboidlund

+0

+1,很好的解決方案'Frédéric',今天發現它併爲我工作。 @aboutblank:您應該將此答案標記爲已接受,因爲它似乎也解決了您的問題。 – Nope

+0

只是,謝謝你的通知。 :) – zeboidlund

0

$.val()作品輸入和文本區域。您只需要$.text()就像本身沒有「價值」的div一樣。

3

您應該可以使用jQuery的.is()函數 - 只需將選擇器傳遞給.is(),如果元素與選擇器匹配,則返回true。所以,就看你有一個textarea,你只檢查:

if($(this).is("textarea")) { doStuff(); } 

http://api.jquery.com/is/

0

你也許尋找$(children[i]).attr("tagName");,返回元素的標籤,無論是選擇,輸入或textarea?

3

看看nodeName屬性。

jQuery(id).children().map(function(){ 
    console.log(children[i].nodeName.toLowerCase()); 
}); 

你可以,但不必從jQuery的(這裏的開銷)使用is方法。

+0

使用'nodeName'很好,但要小心這種情況。根據文檔類型(HTML或XML),返回值的大小寫不會相同(分別是大寫或者是)。 –

+1

你是對的,我更新了代碼片段:) – pomeh

0

望着jQuery的文檔,你可以使用$(:input)輕鬆搞定所有的表單輸入:http://api.jquery.com/input-selector/

說明:選擇所有輸入,文本區域,選擇和按鈕元素。 :輸入選擇器基本上選擇所有表單控件。

.val()還與文本區,但有一個需要注意的......看到的文檔以供參考: http://api.jquery.com/val/

弗雷德裏克張貼了他的答案,因爲我在寫這一點,他使用is()肯定的解決方案證明了。