我想迭代一个表单,将每个元素添加到一个区域。问题是这些元素中的一些是选择,输入和文本框。我知道我可以使用:input
来解决这个问题(不过,我真的不需要)。问题是我无法确定如何查看元素是否为textarea,input,select等。我需要正确地执行此操作,因为据我所知,jQuery("input#someinput").val()
效果很好对于输入,但对于textarea,我可能需要jQuery("textarea#sometexarea").text()
。我不确定这是否存在......
无论如何,到目前为止,这是我的功能:
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;
}
答案 0 :(得分:52)
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.
}
});
答案 1 :(得分:3)
你应该能够使用jQuery的.is()函数 - 只需将选择器传递给.is(),如果元素与选择器匹配,它将返回true。所以,看看你是否有textarea,你只需检查:
if($(this).is("textarea")) { doStuff(); }
答案 2 :(得分:3)
查看nodeName
属性。
jQuery(id).children().map(function(){
console.log( children[i].nodeName.toLowerCase() );
});
您可以但不必使用jQuery中的is
方法(此处为开销)。
答案 3 :(得分:0)
$.val()
适用于输入和文本区域。对于像本身没有“值”的div这样的事情,你只需要$.text()
。
答案 4 :(得分:0)
你是否正在寻找$(children[i]).attr("tagName");
,它返回元素的标签,是select,input还是textarea?
答案 5 :(得分:0)
查看jQuery的文档,您可以使用$(:input)
轻松获取所有表单输入:http://api.jquery.com/input-selector/
描述:选择所有输入,textarea,select和按钮元素。 :输入选择器基本上选择所有表单控件。
.val()
也适用于文字区域,但有一点需要注意......请参阅文档以供参考:
http://api.jquery.com/val/
is()
的解决方案肯定证明了这一点。