문제
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(''));
}
});
제휴하지 않습니다 StackOverflow