【发布时间】:2016-11-16 09:41:31
【问题描述】:
所以我正在编写一个需要输入地址的应用程序,并且我有一个 select 元素供用户选择州/省。它需要支持US 和Canada,因此它嵌套了optgroups 以将它们分开,并使用一个单一的第一级选项作为默认值。这是一个基本的例子:
<select name="state" id="state">
<option class="co" value="" data-placeholder="true" disabled selected>Choose your state...</option>
<optgroup label="United States">
<option class="co" value="AL">Alabama</option>
<option class="co" value="AK">Alaska</option>
<option class="co" value="AZ">Arizona</option>
</optgroup>
<optgroup label="Canada">
<option class="co" value="AB">Alberta</option>
<option class="co" value="BC">British Columbia</option>
<option class="co" value="MB">Manitoba</option>
</optgroup>
现在我需要以编程方式选择与来自外部源的输入匹配的选项,并且我想根据选项元素的值或其文本检查匹配项。无论哪个选项是匹配的,都会被设置为选定的选项。我知道您可以使用
按值设置所选选项$("#state").val(myValue)
我知道您可以通过这种方式根据文本设置选项
var myText = "The state I want.";
$("#state").children().filter(function() {
return $(this).text() == myText;
}).prop('selected', true);
有没有一种干净的方法可以做到这一点,而不必遍历每个子节点并检查它是否是一个 optgroup,然后遍历其所有子节点以检查匹配项?有没有简单的方法通过 jQuery 结合设置选中选项的值和文本方法?
另一个复杂的问题是,我将在外部 jQuery 插件中执行此操作。在我需要修改的函数中,我将选择元素作为变量
$element
所以如果可能的话,我需要一种方法来做到这一点:
$element.descendents(":option").filter(function() {
//do the selecting here
}).prop('selected', true);
【问题讨论】:
-
也许使用 jquery 的 has() 类。 api.jquery.com/has
-
$('#state option').filter(function(){ return $(this).text()===mytext;}).prop('selected', true);? -
另一个问题,我在 jQuery 插件中执行此操作,以便函数接收选择元素作为参数。我将此添加到问题的底部。
标签: javascript jquery html html-select