Определение ввода vs textarea в jQuery
Я хочу выполнить итерацию по форме, добавив каждый элемент в область. Проблема в том, что некоторые из этих элементов - это выбор, ввод и текстовые поля. Я знаю, что я могу использовать :input
для решения проблемы здесь (хотя мне это действительно не нужно). Проблема в том, что у меня возникают проблемы с определением того, как я мог видеть, является ли элемент текстовой областью, вводом, выбором и т.д. Мне нужно сделать это правильно, потому что, насколько мне известно, jQuery("input#someinput").val()
отлично работает для входов, но для текстового поля мне может понадобиться 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;
}
Ответы
Ответ 1
val() одинаково хорошо работает с элементами <input>
, <select>
и <textarea>
.
Если вы все еще хотите определить фактический тип элементов, соответствующих селектору :input
, вы можете использовать is() с селектора элементов:
$(":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.
}
});
Ответ 2
Вы должны иметь возможность использовать функцию jQuery.is() - просто передайте селектор в .is(), и он вернет true, если элемент соответствует селектору. Итак, чтобы убедиться, что у вас есть текстовое поле, вы просто проверите:
if($(this).is("textarea")) { doStuff(); }
http://api.jquery.com/is/
Ответ 3
Посмотрите на свойство nodeName
.
jQuery(id).children().map(function(){
console.log( children[i].nodeName.toLowerCase() );
});
Вы можете не использовать метод is
из jQuery (здесь накладные расходы).
Ответ 4
$.val()
работает как для входов, так и для текстовых областей. Вам нужно только $.text()
для таких вещей, как divs, которые не имеют "значения" как такового.
Ответ 5
Возможно, вы ищете $(children[i]).attr("tagName");
, который возвращает тег элемента, будь то select, input или textarea?
Ответ 6
Глядя на документацию для jQuery, вы можете легко получить все входы формы с помощью $(:input)
: http://api.jquery.com/input-selector/
Описание: выбор всех элементов ввода, текстовой области, элемента выбора и кнопки. Селектор ввода: в основном выбирает все элементы управления формой.
.val()
также работает с текстовыми областями, но есть оговорка... см. документы для справки:
http://api.jquery.com/val/
Фредерик опубликовал свой ответ, когда я писал это, и его решение использовать is()
, безусловно, доказывает.