Jquery选择器-text等于-不起作用

Jquery selector - text equals - not working

本文关键字:不起作用 等于 -text 选择器 Jquery      更新时间:2023-09-26

HTML

<select id="myDDL">
    <option selected="selected" value="0">default</option>
    <option value="1">apples</option>
    <option value="2">oranges</option>
</select>

Javascript

setFieldValue("myDDL", "apples");
function setFieldValue(field, value)
{
    var val = $("#" + field + " option[text]");
    console.log(val);
    $("#" + field).val(val);
}

JSFiddle

https://jsfiddle.net/nnvh7e43/

我想根据文本在选择字段中选择一个选项,即:

var val = $("#" + field + " option[text='" + value + "']");

然而,当我在选项后添加[text]时,选择器似乎选择了整个文档,而$("#"+field+"option"(;正如我所期望的那样,只需选择select字段中的所有选项标记。

你能解释一下为什么它不识别"[文本]",以及我如何纠正这一点吗?

感谢

apples是选项的文本,而不是其值。您需要在此处使用.filter()函数:

 $("#" + field + " option").filter(function(){
       return $(this).text() === value ;
 });

此外,您正试图通过文本获取选项值,然后设置其要选择的值。您可以将选项的选定属性设置为true,以将其设置为选定属性:

 $("#" + field + " option").filter(function(){
       return $(this).text() === value ;
 }).prop('selected', true);

工作演示

[] css选择器只能用于属性(hrefselectedvalueclassid…(。不能用于html元素的内容。

Milind Anantwar解决方案是可行的。使用filter:

 $("#" + field + " option").filter(function(){
     return $(this).text() === value ;
 });

您可以这样做:

function setFieldValue(field, value) {
    // First filter all option by text, then get that option value
    var val = $("#" + field + " option").filter(function () {
        return $.trim($(this).text()) == value;
    }).val();
    console.log(val);
    // Set the option w/ text value here
    $("#" + field).val(val);
}

FIDDLE演示

tagname[attributename]这样的选择器在tagname元素上查找实际属性。您的option元素没有text属性。因此,您需要给它们一个text属性,或者,可能更可取的是,修改选择器以检查元素的实际内部文本,而不是查找属性,例如,使用contains:

var val = $("#" + field + " option:contains(" + value + ")");