Есть ли более эффективный способ написать это.
$('#test').find('option:selected[value!=""]')
Вы можете настроить его немного, но используя методы вместо Sizzle:
$('#test').find('option').filter(function() { return this.selected && this.value.length });
Тест : http://jsperf.com/sizzle-vs-methods-filter/12
.filter() составляет около 70%быстрее для меня.
.filter()
Ну, всегда будет только один выбранный, поэтому вам не нужен обработчик find(), по моему мнению.
find()
Я просто напишу это так:
$('#test option:selected[value!=""]')
Я еще не проверял.