2015-09-14 56 views
3

HTMLjQuery选择 - 文本等于 - 不工作

<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 + "']"); 

但是只要我添加[文字]选项后选择似乎选择整个文档,而$(” #“+ field +”选项“);就像我所期望的那样,简单地选择选择字段内的所有选项标签。

您能解释一下为什么它不识别“[文本]”以及我如何纠正?

感谢

+0

可能重复(http://stackoverflow.com/questions/7321896/jquery-find-element-by-text) – Andrey

+0

[jQuery的的可能重复的 - 设定通过其文本描述选择控件的选定值](http:// stackoverflow。com/questions/496052/jquery-setting-the-selected-value-of-a-select-control-via-its-text-description) – PeterKA

回答

5

​​是选项的文字,而不是它的价值。您需要使用.filter()功能在这里:

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

此外,您正在试图获得通过文本的选项值,然后设置其 价值选择。您可以选择的选择的属性,而设置为true,它选择的设置:

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

Working Demo

2

[] CSS选择器只能在属性(hrefselectedvalueclass使用,id ,...)。你不能在html元素的内容上使用它。

Milind Anantwar的解决方案是要走的路。使用filter

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

你可以这样做:

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 DEMO

0

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

var val = $("#" + field + " option:contains(" + value + ")"); 
的[jquery的发现通过文本元素]
+0

当选项'custard apples'出现时会中断 –

+0

Yes was going to say,I故意避免包含,因为我需要一个完全匹配,但我意识到我从来没有在问题中说过 – AndrewB