Javascript и JQuery, как проверить, существует ли элемент option в select?
используя JQuery, я пытаюсь установить параметр, выбранный в элементе "select" на основе строки запроса.
этот вопрос похож на этой, однако мне все равно нужно знать, как проверить, существует ли элемент перед выполнением выбора, иначе страница будет постоянно обновляться (см. условие выхода ниже).
выборка строки запроса выполняется с помощью функции getParameterByName, и она работает нормально.
в текущая реализация ниже:
function setSelectedItem(selectName, itemToSelect) {
///<summary>Selects an HTML option element inside a HTML select element based on the value from the query string.</summary>
///<param name="selectName" type="string">The partial name of the HTML select in which 'itemToSelect' must be selected</param>
///<param name="itemToSelect" type="string">The name of the query string parameter which value is the of the 'option' element to select.</param>
//If an items has already been selected, return
if ($('select[name*=' + selectName + ']')[0].selectedIndex != 0) return;
//Fetches the value from the query string; if empty, returns
var valueToSelect = getParameterByName(itemToSelect);
if (valueToSelect == "") return;
//Fecthes the HTML select object
var selectObject = $('select[name*=' + selectName + ']');
//HERE how to check if 'valueToSelect' does not exist and return?
selectObject.val(valueToSelect).attr('selected', 'selected').change();
}
Update: решение, которое сработало, было:
//Checks if the option exists, and returns otherwise
if (!selectObject.find('option[value=' + valueToSelect + ']').length)
return;
3 ответов
проверьте длину селектора:
var selectObject = $('select[name*=' + selectName + ']');
if (selectObject.length == 0)
return;
selectObject.val(valueToSelect).attr('selected', 'selected').change();
или используйте неявное логическое преобразование в javascript:
var selectObject = $('select[name*=' + selectName + ']');
if (!selectObject.length)
return;
selectObject.val(valueToSelect).attr('selected', 'selected').change();
можно использовать .length>0
чтобы проверить, существует ли элемент. Но если вы запускаете этот код снова и снова, это раздражает, поэтому я написал небольшой плагин, который обеспечивает такую функциональность:
/* doesExist PLUGIN (c) MS */
/* (c) Michael Stadler(MS), */
(function($){
$.fn.doesExist = function()
{
return jQuery(this).length > 0;
};
})(jQuery);
использование:
$('#myDiv').doesExist() // returns a boolean