我用jQuery按字母顺序列出,在不同的语言中,它运行得很好,除了第一行/项目"选择类别"也按字母顺序排列外,我希望它始终位于顶部,始终位于第一位。"选择类别"当然是唯一一个没有价值的类别。有什么解决办法吗?
<!-- Group -->
<div class="control-group">
<label class="control-label" for="lastname"><?php echo $this->lang->line('category');?></label>
<div class="controls">
<select class="span12" name="catagory" id="catagory">
<option value="" ><?php echo $this->lang->line('select_the_category');?></option>
<?php
$lang_code = $page_data['lang_code'];
echo $lang_code;
foreach ($page_data['catagory'] as $key => $value) {
$value = (array) $value;
echo '<option value="'. $value['event_type_id'] .'">'. $value['event_type_name_'.$lang_code] .'</option>';
}
?>
</select>
</div>
</div>
<!-- // Group END -->
jQuery
var mylist = $('#catagory');
var listitems = mylist.children('option').get();
listitems.sort(function(a, b) {
return $(a).text().toUpperCase().localeCompare($(b).text().toUpperCase());
})
$.each(listitems, function(idx, itm) { mylist.append(itm); });
在$page_data['catagory']
上使用php usort
函数并删除jQuery排序。
定制usort:
usort($page_data['catagory'], function ($a, $b) use ($lang_code) {
$idx = 'event_type_name_'.$lang_code;
return strcmp($a[$idx], $b[$idx]);
});
由于您知道"选择类别"选项没有值,因此您可以将其从排序函数中筛选出来,只使用值对options
进行排序。
var mylist = $('#catagory');
var listitems = mylist.children('option').filter(function(){return $(this).val() != "";}).get();
http://jsfiddle.net/daCrosby/jzdj0kLh/