Как определить, является ли элемент, возвращаемый фильтром: input в jQuery, текстовым полем или списком выбора?
Я хочу иметь разное поведение для каждого (текстовое поле возвращает текстовое значение, select возвращает и ключ, и текст)
Пример настройки:
<div id="InputBody">
<div class="box">
<span id="StartDate">
<input type="text" id="control1">
</span>
<span id="Result">
<input type="text" id="control2">
</span>
<span id="SelectList">
<select>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
</span>
</div>
<div class="box">
<span id="StartDate">
<input type="text" id="control1">
</span>
<span id="Result">
<input type="text" id="control2">
</span>
<span id="SelectList">
<select>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
</span>
</div>
а затем сценарий:
$('#InputBody')
// find all div containers with class = "box"
.find('.box')
.each(function () {
console.log("child: " + this.id);
// find all spans within the div who have an id attribute set (represents controls we want to capture)
$(this).find('span[id]')
.each(function () {
console.log("span: " + this.id);
var ctrl = $(this).find(':input:visible:first');
console.log(this.id + " = " + ctrl.val());
console.log(this.id + " SelectedText = " + ctrl.find(':selected').text());
});
jquery
jquery-selectors
Эйджберри
источник
источник
в качестве альтернативы вы можете получить свойства DOM с помощью
.prop
вот пример кода для окна выбора
if( ctrl.prop('type') == 'select-one' ) { // for single select } if( ctrl.prop('type') == 'select-multiple' ) { // for multi select }
для текстового поля
if( ctrl.prop('type') == 'text' ) { // for text box }
источник
Если вы просто хотите проверить тип, вы можете использовать функцию jQuery .is (),
Как и в моем случае, я использовал ниже,
if($("#id").is("select")) { alert('Select'); else if($("#id").is("input")) { alert("input"); }
источник