尝试仅获取<option>元素</option>时出现jQuery未定义错误

时间:2011-11-14 18:37:55

标签: jquery

我的html带有<select>代码和<option>代码。我以这种方式获得了某个选项/值:

$(targetElement).children("option[text=" + Text + "]").val();

其中targetElement是我的<select>元素,而Text是我想要查找的选项的文字。

selecton jsFiddle)中有多个选项时,此功能正常,但只有一个选项时,我会undefinedon jsFiddle)!< / p>

任何人都可以告诉我为什么只有一个选项时它不起作用,以及我如何解决它?

3 个答案:

答案 0 :(得分:2)

试试这个:

$(function(){
  var lastOptionValue = $('select > option:last').val();
  alert(lastOptionValue);
});

您可以尝试here

修改 对不起,我没有注意力......

这是您的correct example

$(function(){
  text = 'Foo';
  var $last = $('select>option').filter(function(){
    return $(this).text() == text;
  }).last();
  if ($last.length > 0){
    alert($last.val());
  }
});

您可以在filter()匿名函数中添加更多功能。例如RegExp或其他你需要的东西。

答案 1 :(得分:2)

[name=value]语法用于检查元素的属性。例如,它将用于匹配FooInAttribute但不匹配下面的FooInContents。

<option value="42" text="FooInAttribute">FooInContents</option>

当有多个<option>标记可用时,我无法告诉您原因,但:contains适用于这两种情况。试试这个,但是正如InviS所说,这假设列表中没有任何选项包含另一个选项的全文(例如,如果你有一个名为'Burger'的选项,你就不能有另一个'汉堡和炸薯条'):

$(targetElement).children("option:contains('" + text + "')").val();

答案 2 :(得分:2)

您还可以使用.filter()方法:

var txt = "Bar";
var x = $('select').children().filter(function() {
    return $(this).text() == txt;
}).val();
console.log(x);

这将返回带有'Bar'的一个值作为文本。