我需要检查<select>是否有一个文本等于特定值的选项。
例如,如果有一个<option value="123">abc</option>,我将寻找"abc"。
有选择器来做这个吗?
我在寻找类似于$('#选择选项[值="123"]');除了文本。
我需要检查<select>是否有一个文本等于特定值的选项。
例如,如果有一个<option value="123">abc</option>,我将寻找"abc"。
有选择器来做这个吗?
我在寻找类似于$('#选择选项[值="123"]');除了文本。
当前回答
您可以使用:contains()选择器来选择包含特定文本的元素。 例如:
$('#mySelect option:contains(abc)')
要检查给定的<select>元素是否有这样的选项,使用.has()方法:
if (mySelect.has('option:contains(abc)').length)
要查找所有包含此选项的<select>,请使用:has()选择器:
$('select:has(option:contains(abc))')
其他回答
使用prop而不是attr
$('#mySelect option:contains(' + value + ')').each(function(){
if ($(this).text() == value) {
$(this).prop('selected', 'selected');
return false;
}
return true;
});
这也是可行的。
$(" #测试”)。找到(“选择选项:包含(B)”).filter(":选择");
如回答中所述,您可以轻松地为hasText创建自己的选择器。这允许你找到$('#test').find('option:hastText("B")').val();
下面是我添加的hasText方法:
if( ! $.expr[':']['hasText'] ) {
$.expr[':']['hasText'] = function( node, index, props ) {
var retVal = false;
// Verify single text child node with matching text
if( node.nodeType == 1 && node.childNodes.length == 1 ) {
var childNode = node.childNodes[0];
retVal = childNode.nodeType == 3 && childNode.nodeValue === props[3];
}
return retVal;
};
}
这是我在jquery V3.6.0的工作在2022年
$("#select >option").filter( function()
{
if ($(this).text() === "123")
{
$(this).prop("selected", true);
}
});
这在jQuery 1.6中是有效的(注意:在开括号前是冒号),但是在新版本(当时是1.10)中无效。
$('#mySelect option:[text=abc]")