Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-使用值或文本设置选择框的所选选项,选项嵌套在optgroup中_Javascript_Jquery_Html_Html Select - Fatal编程技术网

Javascript jQuery-使用值或文本设置选择框的所选选项,选项嵌套在optgroup中

Javascript jQuery-使用值或文本设置选择框的所选选项,选项嵌套在optgroup中,javascript,jquery,html,html-select,Javascript,Jquery,Html,Html Select,因此,我正在编写一个需要地址输入的应用程序,我有一个select元素供用户选择州/省。它需要支持美国和加拿大,因此它有嵌套的optgroup来分隔这些选项,并有一个第一级选项作为默认值。以下是一个基本示例: <select name="state" id="state"> <option class="co" value="" data-placeholder="true" disabled selected>Choose your state...</opti

因此,我正在编写一个需要地址输入的应用程序,我有一个select元素供用户选择州/省。它需要支持美国和加拿大,因此它有嵌套的optgroup来分隔这些选项,并有一个第一级选项作为默认值。以下是一个基本示例:

<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>
我知道你可以用这种方式设置一个基于文本的选项

var myText = "The state I want.";
$("#state").children().filter(function() {
  return $(this).text() == myText;
}).prop('selected', true);
有没有一种干净的方法可以做到这一点,而不必遍历每个子级并检查它是否是optgroup,然后遍历它的所有子级以检查是否匹配?通过jQuery是否有一种简单的方法来组合设置所选选项的值和文本方法

另一个复杂的问题是,我将在一个外部jQuery插件中完成这项工作。在我需要修改的函数中,我将select元素作为变量

$element
因此,如果可能的话,我需要一种这样做的方法:

$element.descendents(":option").filter(function() {
  //do the selecting here
}).prop('selected', true);

如果要按选项值进行选择,请使用值选择器:

var myText = "AZ";
$('#state option[value="' + myText + '"]').prop('selected', true);
如果要按选项的标签进行搜索,请使用过滤器:

var myText = "Arizona";
$('#state option').filter(function () { return $(this).html() == myText; }).prop('selected', true)
这是一种方法


但我想,在不知道.find方法的确切内部结构的情况下,最终jQuery将使用至少两个循环本身来执行此操作…

。由于我已经将元素作为jQuery变量$element传递给函数,因此我不能仅使用以下形式的标准选择器:

$("#state option").filter(
  // filter function
).prop('selected', true);
经过多次尝试,我得到了这个结果:

function functionIHadToChange($element, value) {
  // other code
  $element.find("option").filter(function(){
      return ( ($(this).val() == value) || ($(this).text() == value) )
    }).prop('selected', true);
}

我不确定我是否完全理解了你的问题,但我正试图用这种方式来回答它

诀窍在于,您可以通过直接设置选择框的值来选择它

$("#state").val( a_value );
您可以通过$select\u id.propselectedIndex,3;//进行设置选择索引从零开始


例如,请阅读这里。

我在这里迟到了,但对于未来的访客来说,最简单的方法是:

html 输出:这将激活ENT


可能使用jquery中的has类。$'状态选项'.filterfunction{return$this.text==mytext;}.prop'selected',true?另一个问题是,我在jQuery插件中这样做,以便函数接收select元素作为参数。我把这个加在了问题的最下面。看起来你刚刚在这方面击败了我。我就是这样解决的。
function functionIHadToChange($element, value) {
  // other code
  $element.find("option").filter(function(){
      return ( ($(this).val() == value) || ($(this).text() == value) )
    }).prop('selected', true);
}
$("#state").val( a_value );
<select name="dept">
<option value="">This doctor belongs to which department?</option>
<option value="1">Orthopaedics</option>
<option value="2">Pathology</option>
<option value="3">ENT</option>
</select>
$('select[name="dept"]').val('3');