Truy xuất văn bản của phần tử <tùy chọn> đã chọn trong phần tử <select>


156

Trong những điều sau đây:

<select id="test">
    <option value="1">Test One</option>
    <option value="2">Test Two</option>
</select>

Làm cách nào tôi có thể nhận được văn bản của tùy chọn đã chọn (ví dụ: "Thử nghiệm một" hoặc "Thử nghiệm hai") bằng cách sử dụng JavaScript

document.getElementsById('test').selectedValue trả về 1 hoặc 2, thuộc tính nào trả về văn bản của tùy chọn đã chọn?

Câu trả lời:


258
function getSelectedText(elementId) {
    var elt = document.getElementById(elementId);

    if (elt.selectedIndex == -1)
        return null;

    return elt.options[elt.selectedIndex].text;
}

var text = getSelectedText('test');

javascript tuyệt vời như mọi khi!
trợ

3
Câu trả lời này đã lỗi thời, hãy xem câu trả lời của @ davidjb bên dưới để có một lớp lót HTML5 đẹp.
Christallkeks

1
@Christallkeks - một lớp lót ném một ngoại lệ nếu không có gì được chọn . Ít dòng hơn luôn luôn tốt hơn.
Sean Bright

88

Nếu bạn sử dụng jQuery thì bạn có thể viết đoạn mã sau:

$("#selectId option:selected").html();

30
vì anh ta muốn văn bản, có lẽ tốt hơn để sử dụng.text()
Muhd

5
Đừng nhầm lẫn $("#selectId option[selected]"), sẽ chọn tùy chọn có thuộc tính "được chọn" nhưng hiện tại có thể không được chọn.
mowwwalker

có vẻ phức tạp hơn.!
NDEthos

54
document.getElementById('test').options[document.getElementById('test').selectedIndex].text;

Nó cũng làm việc cho tôi, sau khi thử tất cả các lựa chọn khác.
mimi

wordk này hoàn hảo!
Albert Hidalgo


28

Trong HTML5, bạn có thể làm điều này:

document.getElementById('test').selectedOptions[0].text

Tài liệu của MDN tại https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectEuity/selectedOptions chỉ ra hỗ trợ trình duyệt chéo đầy đủ (ít nhất là vào tháng 12 năm 2017), bao gồm Chrome, Firefox, Edge và trình duyệt di động , nhưng không bao gồm Internet Explorer.


+1, trong khi đó đây là con đường để đi. Vé Firefox đã được sửa và tôi thậm chí còn bận tâm mở MS Edge để xác minh rằng họ cũng hỗ trợ nó.
Christallkeks

7

Tài optionssản chứa tất cả <options>- từ đó bạn có thể nhìn vào.text

document.getElementById('test').options[0].text == 'Text One'

6

Bạn có thể sử dụng selectedIndexđể truy xuất hiện tại đã chọn option:

el = document.getElementById('elemId')
selectedText = el.options[el.selectedIndex].text


2

Nếu bạn tìm thấy chủ đề này và muốn biết làm thế nào để có được văn bản tùy chọn đã chọn thông qua sự kiện ở đây là mã mẫu:

alert(event.target.options[event.target.selectedIndex].text);

1

Sử dụng đối tượng danh sách chọn, để xác định chỉ mục tùy chọn đã chọn của chính nó. Từ đó - lấy HTML bên trong của chỉ mục đó. Và bây giờ bạn có chuỗi văn bản của tùy chọn đó.

<select onchange="alert(this.options[this.selectedIndex].innerHTML);">
       <option value="">Select Actions</option>
       <option value="1">Print PDF</option>
       <option value="2">Send Message</option>
       <option value="3">Request Review</option>
       <option value="4">Other Possible Actions</option>
    </select>

Thêm một số lời giải thích
HaveNoDisplayName

.innerHTMLđược tất cả trẻ em và thuộc tính của họ. Trong khi nó hoạt động khi một phần tử không có con, nếu bạn có một phần tử có con, nó sẽ trả về nhiều hơn dự định.
hipkiss

1
Bạn dự kiến ​​có bao nhiêu "trẻ em" ở giữa các thẻ <tùy chọn> Trẻ em? </ Tùy chọn> của bạn?
Creeperstanson

0

Tương tự như @artur chỉ không có jQuery, với javascript đơn giản:

// Sử dụng biến "elt" của @ Sean-sáng

var selection=elt.options[elt.selectedIndex].innerHTML;

0

Cách dễ dàng, đơn giản:

const select = document.getElementById('selectID');
const selectedOption = [...select.options].find(option => option.selected).text;

1
Mặc dù đoạn mã này có thể giải quyết vấn đề, nhưng nó không giải thích tại sao hoặc làm thế nào để trả lời câu hỏi. Vui lòng bao gồm một lời giải thích cho mã của bạn , vì điều đó thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
Luca Kiebel

Tôi không thấy cách này dễ hay đơn giản. Tại sao bạn sẽ sử dụng find()khi bạn đã biết chỉ mục của mục đã chọn? Ngoài ra, nếu không có mục được chọn ( <select multiple>), điều này sẽ tạo ra lỗi.
Sean Bright
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.