我的html带有<select>
代码和<option>
代码。我以这种方式获得了某个选项/值:
$(targetElement).children("option[text=" + Text + "]").val();
其中targetElement
是我的<select>
元素,而Text
是我想要查找的选项的文字。
当select
(on jsFiddle)中有多个选项时,此功能正常,但只有一个选项时,我会undefined
(on jsFiddle)!< / p>
任何人都可以告诉我为什么只有一个选项时它不起作用,以及我如何解决它?
答案 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'的一个值作为文本。