jQuery nhận văn bản thẻ tùy chọn cụ thể


1234

Được rồi, nói rằng tôi có cái này:

<select id='list'>
    <option value='1'>Option A</option>
    <option value='2'>Option B</option>
    <option value='3'>Option C</option>
</select>

Công cụ chọn sẽ trông như thế nào nếu tôi muốn nhận "Tùy chọn B" khi tôi có giá trị '2'?

Xin lưu ý rằng đây không phải là hỏi làm thế nào để có được giá trị văn bản đã chọn , mà chỉ bất kỳ một trong số chúng, dù được chọn hay không, tùy thuộc vào thuộc tính giá trị. Tôi đã thử:

$("#list[value='2']").text();

Nhưng nó không hoạt động.


Trong khoảng thời gian này, hãy sử dụng:$("#list option").filter(function () { return $(this).html() == "stuff"; }).val();
rook

Câu trả lời:


1122

Đó là tìm kiếm một phần tử có id listcó thuộc tính valuebằng 2.
Những gì bạn muốn là optioncon của list:

$("#list option[value='2']").text()

4
Cảm ơn bạn cho nickf này. Đây là câu trả lời được mở rộng nếu bạn muốn lấy giá trị một cách linh hoạt: var selectValue = document.getEuityById ('list'). Value; var selectOption = $ ("# list tùy chọn [value =" + selectValue + "]"). text (); /// ví dụ tốt nickf.
Kevin Florida

283
@Kevin, trong trường hợp đó, bạn có thể muốn sử dụng câu trả lời bên dưới câu hỏi này. $('#list option:selected').text()
nickf

6
@nickf, và đơn giản hơn,$('#list').val()
Derek 會

36
@Derek, val () sẽ không cung cấp văn bản của tùy chọn, nó sẽ cho giá trị của nó, trong một số trường hợp (nhiều người tôi dám nói) không giống nhau.
itmequinn

bạn nên luôn luôn sử dụng .trim()sau .text()vì một số trình duyệt có thể thêm đôi khi một số khoảng trắng trước và sau văn bản vô hình với người dùng nhưng có thể dẫn đến nhận các giá trị sai$("#list option[value='2']").text().trim()
Hassan ALAMI

1262

Nếu bạn muốn nhận tùy chọn có giá trị là 2, hãy sử dụng

$("#list option[value='2']").text();

Nếu bạn muốn nhận tùy chọn nào hiện đang được chọn, hãy sử dụng

$("#list option:selected").text();

11
Để lấy giá trị thay vì văn bản, bạn sẽ cần viết: - $ ("chọn # list"). Val (); Tôi biết rằng đây không phải là câu trả lời thực sự của câu hỏi được hỏi, nhưng vẫn nghĩ đến việc đề cập đến điểm này cho những người mới đến thông qua Google.
Kiến thức tham vọng

Tôi sử dụng tùy chọn $ ("# list: đã chọn"). Text () và $ ("# list tùy chọn: đã chọn"). Attr ('value')
fullstacklife

Để có được văn bản đã chọn (mặc dù câu hỏi không hỏi cụ thể), phương pháp này vượt trội hơn do không phải biết giá trị được chọn là gì.
22 giờ 32 phút

132

Điều này hoạt động hoàn hảo với tôi, tôi đang tìm cách gửi hai giá trị khác nhau với các tùy chọn được tạo bởi MySQL và sau đây là chung chung và động:

$(this).find("option:selected").text();

Như đã đề cập trong một trong những ý kiến. Với điều này, tôi có thể tạo một hàm động hoạt động với tất cả các hộp lựa chọn mà tôi muốn nhận cả hai giá trị, giá trị tùy chọn và văn bản.

Vài ngày trước tôi nhận thấy rằng khi cập nhật jQuery từ 1.6 lên 1.9 của trang tôi đã sử dụng mã này, việc này dừng hoạt động ... có lẽ là xung đột với một đoạn mã khác ... dù sao, giải pháp là xóa tùy chọn khỏi tìm () gọi:

$(this).find(":selected").text();

Đó là giải pháp của tôi ... chỉ sử dụng nó nếu bạn gặp bất kỳ vấn đề nào sau khi cập nhật jQuery.


2
được cho là đây là cách hiệu quả hơn để làm điều đó theo
WebStorm

2
Mặc dù câu trả lời này rất sâu sắc và giúp tôi giải quyết vấn đề mà tôi gặp phải, đối với nitpick, nó không trả lời đúng câu hỏi: Xin lưu ý rằng đây không phải là hỏi làm thế nào để có được giá trị văn bản đã chọn, mà chỉ là một trong số chúng, cho dù được chọn hoặc không, tùy thuộc vào thuộc tính giá trị.
StubbornShowaGuy

109

Dựa trên HTML gốc được đăng bởi Paolo, tôi đã đưa ra những điều sau đây.

$("#list").change(function() {
    alert($(this).find("option:selected").text()+' clicked!');
});

Nó đã được thử nghiệm để hoạt động trên Internet Explorer và Firefox.


11
Một thay thế cho điều này là: $ ("tùy chọn: đã chọn", cái này) .text ()
Doug S

Đây là một câu trả lời tốt hơn vì nó chiếm các kịch bản phức tạp không chỉ các sự kiện javascript tĩnh và các sự kiện javascript đơn giản.
oasisfleeting

37
$("#list option:selected").each(function() {
   alert($(this).text());
});  

cho nhiều giá trị được chọn trong #listphần tử.


37
  1. Nếu chỉ có một thẻ chọn trong trang thì bạn có thể chỉ định chọn bên trong id 'list'

    jQuery("select option[value=2]").text();
  2. Để có được văn bản đã chọn

    jQuery("select option:selected").text();

24

Hãy thử như sau:

$("#list option[value=2]").text();

Lý do tại sao đoạn mã gốc của bạn không hoạt động là vì các OPTIONthẻ của bạn là con của SELECTthẻ, trong đó có id list.


19

Đây là một Câu hỏi cũ chưa được cập nhật trong một thời gian, cách chính xác để làm điều này bây giờ sẽ là sử dụng

$("#action").on('change',function() {
    alert($(this).find("option:selected").text()+' clicked!');
});

Tôi hi vọng cái này giúp được :-)


Điều này hoàn toàn không đúng Xin lưu ý rằng đây không phải là cách hỏi giá trị văn bản đã chọn
Wesley Smith

17

Tôi muốn có được nhãn đã chọn. Điều này làm việc cho tôi trong jQuery 1.5.1.

$("#list :selected").text();

17
$(this).children(":selected").text()

Thật không may, điều này không hoạt động khi bạn có optgroupthẻ là con của bạn selectvà tùy chọn được chọn nằm trong này optgroup. sử dụng $("#list option:selected").text();mà hoạt động ngay cả trong trường hợp này
MartinM

13
$("#list [value='2']").text();

chừa một khoảng trống sau bộ chọn id.


13

Bạn có thể nhận được văn bản tùy chọn đã chọn bằng cách sử dụng chức năng .text();

bạn có thể gọi hàm như thế này:

jQuery("select option:selected").text();

10

Trong khi "lặp" thông qua các phần tử chọn được tạo động với một .each (function () ...): $("option:selected").text();$(this + " option:selected").text()không trả về văn bản tùy chọn đã chọn - thay vào đó là null.

Nhưng giải pháp của Peter Mortensen đã có hiệu quả:

$(this).find("option:selected").text();

Tôi không biết tại sao cách thông thường không thành công trong một .each()(có thể là sai lầm của riêng tôi), nhưng cảm ơn bạn, Peter. Tôi biết đó không phải là câu hỏi ban đầu, nhưng tôi đang đề cập đến nó "cho những người mới đến thông qua Google."

Tôi đã bắt đầu với $('#list option:selected").each()ngoại trừ tôi cần phải lấy nội dung từ phần tử chọn.


8

Sử dụng:

function selected_state(){
    jQuery("#list option").each(function(){
        if(jQuery(this).val() == "2"){
            jQuery(this).attr("selected","selected");
            return false;
        }
    });
}

jQuery(document).ready(function(){
    selected_state();
});

5

Tôi đang tìm kiếm val theo tên trường nội bộ thay vì ID và từ google đến bài đăng này giúp đỡ nhưng không tìm thấy giải pháp tôi cần, nhưng tôi đã có giải pháp và đây là:

Vì vậy, điều này có thể giúp ai đó tìm kiếm giá trị được chọn bằng tên nội bộ của trường thay vì sử dụng id dài cho danh sách SharePoint:

var e = $('select[title="IntenalFieldName"] option:selected').text(); 

Dung dịch rắn. Xin lỗi nó ở một nơi bí mật như vậy ở đây. Bạn có thể muốn tìm một nơi nổi bật hơn để cung cấp giải pháp này. Có lẽ bạn có thể hỏi và trả lời một câu hỏi của riêng bạn?
Andrew Kozak

4

Tôi cần câu trả lời này khi tôi đang xử lý một đối tượng được tạo động và các phương thức khác ở đây dường như không hoạt động:

element.options[element.selectedIndex].text

Điều này tất nhiên sử dụng đối tượng DOM thay vì phân tích cú pháp HTML của nó bằng nodeValue, childNodes, v.v.




2

Tôi muốn có một phiên bản động để chọn nhiều phiên bản sẽ hiển thị những gì được chọn ở bên phải (muốn tôi đọc và xem $(this).find... trước đó):

<script type="text/javascript">
    $(document).ready(function(){
        $("select[showChoices]").each(function(){
            $(this).after("<span id='spn"+$(this).attr('id')+"' style='border:1px solid black;width:100px;float:left;white-space:nowrap;'>&nbsp;</span>");
            doShowSelected($(this).attr('id'));//shows initial selections
        }).change(function(){
            doShowSelected($(this).attr('id'));//as user makes new selections
        });
    });
    function doShowSelected(inId){
        var aryVals=$("#"+inId).val();
        var selText="";
        for(var i=0; i<aryVals.length; i++){
            var o="#"+inId+" option[value='"+aryVals[i]+"']";
            selText+=$(o).text()+"<br>";
        }
        $("#spn"+inId).html(selText);
    }
</script>
<select style="float:left;" multiple="true" id="mySelect" name="mySelect" showChoices="true">
    <option selected="selected" value=1>opt 1</option>
    <option selected="selected" value=2>opt 2</option>
    <option value=3>opt 3</option>
    <option value=4>opt 4</option>
</select>

2

Bạn có thể có được một trong những cách sau

$("#list").find('option').filter('[value=2]').text()

$("#list").find('option[value=2]').text()

$("#list").children('option[value=2]').text()

$("#list option[value='2']").text()

$(function(){    
    
    console.log($("#list").find('option').filter('[value=2]').text());
    console.log($("#list").find('option[value=2]').text());
    console.log($("#list").children('option[value=2]').text());
    console.log($("#list option[value='2']").text());
    
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<select id='list'>
    <option value='1'>Option A</option>
    <option value='2'>Option B</option>
    <option value='3'>Option C</option>
</select>

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.