選択したリスト項目を空白のまま表示し、選択した表示テキストの空白のみを削除したい場合は、次のハックを試すことができます。
$('#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));
});
のselect
text プロパティは不変であるため、select
スペースの数に基づいて の表示内で選択したオプションのテキストのインデントを解除するための小さな css ハックを作成しました。
JSFiddle
ページで別のフォントまたはフォント サイズを使用している場合は、テキスト以外の余分なスペースを削除し、スペース文字の幅 (ピクセル単位) に一致
するoption
ように調整することを忘れないでください。space_offset
編集: Chrome でのみテストしました。Firefox の場合は、追加の css ハッキングが必要です。
編集:さて、これがCSSハックなしの私の最終バージョンです:
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 でテスト済み。Webkit ベースなので、Safari でも動作するはずです。