在jQuery中确定输入vs textarea

时间:2011-11-28 18:36:17

标签: jquery html-form

我想迭代一个表单,将每个元素添加到一个区域。问题是这些元素中的一些是选择,输入和文本框。我知道我可以使用: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;
}

6 个答案:

答案 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(); }

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

答案 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()的解决方案肯定证明了这一点。