如果您希望仅在选择的显示文本中删除间距,但仍以间距显示选定的列表项,您可以尝试以下技巧:
$('#select_parent').bind("change", function() {
var space_offset = 8;
var matches = $('#select_parent option:selected').text().match(/\s+?/g);
var n_spaces = (matches) ? matches.length : 0;
$(this).css('text-indent', -(n_spaces*space_offset));
});
的text 属性是不可变的,因此我做了一个小的 css hack,根据它有多少空格select
来取消缩进 ' 显示中的选定选项的文本。select
JSFiddle
如果您的页面使用不同的字体或字体大小,请不要忘记删除除
insdeoption
文本之外的任何额外间距,并调整以匹配空格字符的宽度(以像素为单位)。space_offset
编辑:我仅在 Chrome 上对其进行了测试,对于 Firefox,它需要额外的 css hacking。
编辑:好的,这是我的最终版本,没有任何 css hack:
var trig = ($.browser.mozilla) ? 'click' : 'mousedown';
$(function() {
$('#select_parent').on("change", function() {
var sel = $('#select_parent option:selected');
$(this).data('cur_val', sel);
var display = sel.clone();
display.text($.trim(display.text()));
sel.replaceWith(display);
$(this).prop('selectedIndex', display.index());
}).on(trig, function() {
if ($(this).prop('selectedIndex') == 0)
return;
var sel = $('#select_parent option:selected');
sel.replaceWith($('#select_parent').data('cur_val'));
$(this).prop('selectedIndex', 0);
});
$('#select_parent').change();
});
JSFiddle
在 Firefox、Chrome、IE 和 Opera 上测试。也应该在 Safari 上工作,因为它是基于 Webkit 的。