我有一个<select>
标签和<option>
标签的html。我以这种方式获得一个特定的选项/值:
$(targetElement).children("option[text=" + Text + "]").val();
其中targetElement
是我的<select>
元素,Text
是我想要找到的选项的文本。
当select
(在jsFiddle上)有多个选项时,这可以正常工作,但是当只有一个选项时,我得到undefined
(在jsFiddle上)!
有谁能告诉我为什么当只有一个选择时它不起作用,我该如何修复它?
[name=value]
语法用于检查元素的属性。例如,它将用于匹配FooInAttribute而不是下面的FooInContents。
<option value="42" text="FooInAttribute">FooInContents</option>
我不能告诉你为什么当有多个<option>
标签可用时它会起作用,但:contains
在两种情况下都有效。试试这个,但正如InviS指出的,这假设列表中没有选项包含另一个选项的全文(即,如果你有一个名为"Burger"的选项,你就不能有另一个"Burger and Fries"):
$(targetElement).children("option:contains('" + text + "')").val();
您还可以使用.filter()
方法:
var txt = "Bar";
var x = $('select').children().filter(function() {
return $(this).text() == txt;
}).val();
console.log(x);
这将返回一个以'Bar'作为文本的值
试试这个:
$(function(){
var lastOptionValue = $('select > option:last').val();
alert(lastOptionValue);
});
你可以在这里试试。
编辑:对不起,我没注意……
这是你正确的例子:
$(function(){
text = 'Foo';
var $last = $('select>option').filter(function(){
return $(this).text() == text;
}).last();
if ($last.length > 0){
alert($last.val());
}
});
您可以在filter()
匿名函数中添加更多功能。例如RegExp或者其他你需要的东西