You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Yii2 Kartik Select2下拉框中$model['question']的字体

解决Select2下拉选项中单独修改Question字体样式的问题

你之前给options配置的style是作用于整个Select2输入框的,不是下拉列表里的单个选项内容,所以没法单独修改question的样式。要实现这个需求,我们可以通过在选项文本中嵌入HTML标签,并让Select2允许渲染HTML内容来完成,具体步骤如下:

步骤1:给Question部分添加HTML样式标签

在生成选项文本的时候,把$model['question']用带样式的<span>标签包裹起来,按需设置字体加粗、颜色等样式:

<?= $form->field($model, 'faqid')->widget(Select2::classname(), [ 
    'data' => \yii\helpers\ArrayHelper::map( 
        \app\models\Faq::find()->all(), 'faqid', function ($model) { 
            // 给question添加自定义样式的span标签
            return '<span style="font-weight: bolder; color: #2d3748;">' . $model['question'] . '</span> - ' . $model['answer']; 
        } 
    ), 
    'options' => [ 'placeholder' => 'Select Question' ], 
    'pluginOptions' => [ 
        'allowClear' => true,
        // 关键配置:让Select2不转义HTML内容
        'escapeMarkup' => function ($markup) {
            return $markup;
        }
    ], 
])->label('Questions - Answers'); ?>

步骤2:关键配置说明

  • escapeMarkup:默认Select2会自动转义HTML内容来防范XSS风险,我们通过自定义这个函数直接返回原始标记,让Select2能渲染我们嵌入的<span>标签,从而实现单独修改question的样式。
  • 若question内容来自用户输入(存在XSS风险),建议先对内容进行转义处理,比如使用\yii\helpers\Html::encode($model['question'])包裹内容后再添加样式标签。

这样修改后,下拉选项里的Question部分就会应用你设置的字体样式,Answer部分则保持默认样式啦。

内容的提问来源于stack exchange,提问作者Karijoatmo Sergio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:23:38