2015-09-14 112 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