我有一个带有一些隐藏选项和两个按钮(上下)的选择框。为了隐藏选项,我必须将它们包裹在不可见的span中,因为在某些浏览器中,<option style="display: none;">
并不能起作用。当我按上或下按钮时,我必须将选择的选项在选择列表中向上或向下移动。最近我是这样实现的:
function moveOption(option, up) {
if (up) {
option.insertBefore(option.prev());
} else {
option.insertAfter(option.next());
}
}
但问题是 - 如果我有隐藏的选项,我必须按多次按钮才能将其与可见选项切换,因为每次按下按钮时,我都会得到一个与不可见选项切换的选项。为了解决这个问题,我已经尝试过:
option.insertBefore(option.prev(':not(.hidden)'));
option.insertBefore(option.prev('option'));
option.insertBefore(option.prev(':is(visible)'));
但似乎没有一个有效的解决办法。这里是js fiddle链接。
$('#up').click(function() {
var option = $('select').children('option:selected');
moveOption(option, true);
});
$('#down').click(function() {
var option = $('select').children('option:selected');
moveOption(option, false);
});
function moveOption(option, up) {
if (up) {
option.insertBefore(option.prev());
} else {
option.insertAfter(option.next());
}
}
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select size="10">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<span class="hidden"><option class="hidden" value="4">Four</option></span>
<span class="hidden"><option class="hidden" value="5">Five</option></span>
<span class="hidden"><option class="hidden" value="6">Six</option></span>
<span class="hidden"><option class="hidden" value="7">Seven</option></span>
<span class="hidden"><option class="hidden" value="8">Eight</option></span>
<option value="9">Nine</option>
<option value="10">Ten</option>
</select>
<input type="button" value="Up" id="up" />
<input type="button" value="Down" id="down" />