문제

jQuery를 사용하여 멀티 라인 선택 상자를 필터링하는 방법이 있습니까?

나는 jQuery를 처음 접했고 이것을하는 가장 좋은 방법을 찾을 수없는 것 같습니다.

예를 들어 내가 가지고있는 경우 :

<select size="10">
   <option>abc</option>
   <option>acb</option>
   <option>a</option>
   <option>bca</option>
   <option>bac</option>
   <option>cab</option>
   <option>cba</option>
   ...
</select>

선택 드롭 다운을 기반 으로이 목록을 필터링하고 싶습니다.

<select>
   <option value="a">Filter by a</option>
   <option value="b">Filter by b</option>
   <option value="c">Filter by c</option>
</select>
도움이 되었습니까?

해결책

이와 같은 일이 트릭을 수행 할 수 있습니다 ( '필터를 제공한다고 가정하면 ...'ID를 선택하십시오. 필터 그리고 필터링 / 기타의 ID를 선택합니다 다른 옵션):

$(document).ready(function() {
    $('#filter').change(function() {
        var selectedFilter = $(this).val();
        $('#otherOptions option').show().each(function(i) {
            var $currentOption = $(this);
            if ($currentOption.val().indexOf(selectedFilter) !== 0) {
                $currentOption.hide();
            }
        });
    });
});

업데이트 : @Brian Liang이 의견에서 지적한 것처럼u003Coption> 태그로 디스플레이 : 없음. 따라서 다음은 더 나은 크로스 브라우저 솔루션을 제공해야합니다.

$(document).ready(function() {
    var allOptions = {};

    $('#otherOptions option').each(function(i) {
        var $currentOption = $(this);
        allOptions[$currentOption.val()] = $currentOption.text();
    });

    $('#filter').change(function() {
        // Reset the filtered select before applying the filter again
        setOptions('#otherOptions', allOptions);
        var selectedFilter = $(this).val();
        var filteredOptions = {};

        $('#otherOptions option').each(function(i) {
            var $currentOption = $(this);

            if ($currentOption.val().indexOf(selectedFilter) === 0) {
                filteredOptions[$currentOption.val()] = $currentOption.text();
            }
        });

        setOptions('#otherOptions', filteredOptions);
    });

    function setOptions(selectId, filteredOptions) {
        var $select = $(selectId);
        $select.html('');

        var options = new Array();
        for (var i in filteredOptions) {
            options.push('<option value="');
            options.push(i);
            options.push('">');
            options.push(filteredOptions[i]);
            options.push('</option>');
        }

        $select.html(options.join(''));
    }

});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top