用jQuery文本内容select选项
我想设置一个下拉框,通过查询string使用jQuery的传递。
如何将选定的属性添加到一个选项,使“TEXT”值等于查询string中的某个参数?
$(document).ready(function() { var cat = $.jqURL.get('category'); if (cat != null) { cat = $.URLDecode(cat); var $dd = $('#cbCategory'); var $options = $('option', $dd); $options.each(function() { if ($(this).text() == cat) $(this).select(); // This is where my problem is }); }; });
replace这个:
var cat = $.jqURL.get('category'); var $dd = $('#cbCategory'); var $options = $('option', $dd); $options.each(function() { if ($(this).text() == cat) $(this).select(); // This is where my problem is });
有了这个:
$('#cbCategory').val(cat);
调用select列表中的val()
将自动select具有该值的选项(如果有的话)。
我知道这个问题太旧了,但是,我认为这种方法会更清洁:
cat = $.URLDecode(cat); $('#cbCategory option:contains("' + cat + '")').prop('selected', true);
在这种情况下,你不需要遍历each()
的整个选项。 虽然到那个时候prop()
不存在,所以老版本的jQuery使用attr()
。
UPDATE
在使用contains
时候必须要确定,因为你可以find多个选项,如果cat
里面的string匹配一个不同于你打算匹配的选项的子string。
那么你应该使用:
cat = $.URLDecode(cat); $('#cbCategory option') .filter(function(index) { return $(this).text() === cat; }) .prop('selected', true);
如果你的<option>
元素没有value
属性,那么你可以使用.val
:
$selectElement.val("text_you're_looking_for")
但是,如果<option>
元素具有值属性,或者将来可能会这样做,那么这将不起作用,因为只要有可能, .val
将通过其value
属性而不是其文本内容来select一个选项。 没有内置的jQuery方法,如果选项具有value
属性,将通过其文本内容select一个选项,所以我们必须添加一个简单的插件:
/* Source: https://stackoverflow.com/a/16887276/1709587 Usage instructions: Call jQuery('#mySelectElement').selectOptionWithText('target_text'); to select the <option> element from within #mySelectElement whose text content is 'target_text' (or do nothing if no such <option> element exists). */ jQuery.fn.selectOptionWithText = function selectOptionWithText(targetText) { return this.each(function () { var $selectElement, $options, $targetOption; $selectElement = jQuery(this); $options = $selectElement.find('option'); $targetOption = $options.filter( function () {return jQuery(this).text() == targetText} ); // We use `.prop` if it's available (which it should be for any jQuery // versions above and including 1.6), and fall back on `.attr` (which // was used for changing DOM properties in pre-1.6) otherwise. if ($targetOption.prop) { $targetOption.prop('selected', true); } else { $targetOption.attr('selected', 'true'); } }); }
在将jQuery添加到页面上之后,只需将该插件添加到某处即可
jQuery('#someSelectElement').selectOptionWithText('Some Target Text');
select选项。
插件方法使用filter
来挑选出匹配targetText的option
,并使用.attr
或.prop
select它,具体取决于jQuery版本(请参阅.prop()和.attr() )。
下面是一个JSFiddle,你可以使用这个问题的三个答案,这表明这是唯一可靠的工作: http : //jsfiddle.net/3cLm5/1/