【问题标题】:Is it possible to color each row in an html selector?是否可以为 html 选择器中的每一行着色?
【发布时间】:2013-12-03 15:11:16
【问题描述】:

我有一个 html 选择器,用户可以通过它选择颜色。

<select name="color" class="form-control">
  <option value="ff0000">Red</option>
  <option value="ff7f00">Orange</option>
  <option value="ffff00">Yellow</option>
  <option value="7fff00">Chartreuse</option>
  <option value="00ff00">Green</option>
  <option value="00ff7f">Spring Green</option>
  <option value="00ffff">Cyan</option>
  <option value="007fff">Azure</option>
  <option value="0000ff">Blue</option>
  <option value="7f00ff">Violet</option>
  <option value="ff00ff">Magenta</option>
  <option value="ff007f">Rose</option>
</select>

我想用它所代表的颜色为选择器中的每个选项着色,以便用户可以看到他们正在选择的颜色。有没有办法做到这一点?

编辑:有人指出,我不清楚我是否希望(理想情况下)在高光上表示这种颜色,这样您就会看到看起来像油漆样本的东西。如果这是不可能的,那么我想至少在选择颜色时将选择器的背景颜色更改为所选颜色的背景颜色。

【问题讨论】:

  • 您不能直接设置选项的样式。您必须生成一组替换标记来替换选择框。这是一个如何做到这一点的例子stackoverflow.com/a/20321986/1514572
  • 如果你想变得花哨,使用 jQuery 更轻松。使用您的值约定:$(".form-control option").each(function() { $(this).css("color","#"+$(this).val()); });
  • 您应该更新您的问题以提及您希望颜色显示为突出显示。然后添加 javascriptjquery 标签,以便有人可以帮助您使用 JS 解决方案,因为仅使用 CSS 无法在高亮上执行此操作。
  • @setek,谢谢。我更新了。
  • @RUJordan,你能给我看看这个工作的小提琴吗?

标签: javascript jquery html css twitter-bootstrap-3


【解决方案1】:

参考这个fiddle

这是实现预期结果的代码

使用下面代码的好处是你只需要在optionColors数组中添加你想要的颜色,用逗号分隔,它会作为一个选项添加

我还发现here在MAC OS中不会设置背景色选项!!!

HTML

<select name="color" class="form-control" id="Select">
</select>

Javascript

   $(document).ready(function(){
optionColors=["red","blue","green","yellow","black"];
    $.each(optionColors,function(i,data){
        $("#Select").append("<option style='background-color:"+optionColors[i]+"'>"+optionColors[i]+"</option>");

    });
    $("#Select").prepend('<option selected="selected" style="background-color:white">Select a color</option>');
});

【讨论】:

  • 我仍然看不到浏览器有什么不同。 :( 在你的小提琴中,它看起来就像一个普通的选择器。
  • 你点击了选择颜色?!我对每个选项都有不同的背景
  • 嗯。我错过了一些 JSfiddle 库还是什么?这就是我所看到的。 picsurge.com/g/a1deP7
  • picsurge.com/g/zPLpEK 检查图像,否则只需创建一个 html 文件并将内容复制粘贴到其中不要忘记包含 jquery1.9.1
  • 我也在使用 chrome。在 Mac 上。我不知道为什么它对我没有任何区别。
【解决方案2】:

这可以使用 Jquery 来完成,您不需要为颜色编写硬编码 css,它会采用您给出的任何值。

try this

$(document).ready(function(){
    $('.form-control option').each(function(){
        $(this).css('color','#'+$(this).val());
    });
});

【讨论】:

    【解决方案3】:

    事实证明,在 OSX 中无法设置此元素的样式。 : (

    【讨论】:

      【解决方案4】:

      试试这个

      <select name="select">
        <option value="1" style="background-color: blue">Test</option>
        <option value="2" style="background-color: green">Test</option>
      </select>
      

      DEMO

      【讨论】:

      • 我没有看到你的小提琴有什么不同。
      【解决方案5】:

      使用类选择器作为选项。

      CSS

      .optionRed{
        background : red;
      }
      .optionOrange{
        background :orange;
      }
      .optionYellow{
        background : yellow;
      

      }

      HTML

      <select name="color">
      <option value="ff0000" class="optionRed">Red</option>
      <option value="ff7f00" class="optionOrange">Orange</option>
      <option value="ffff00" class="optionYellow">Yellow</option>
      <option value="7fff00">Chartreuse</option>
      <option value="00ff00">Green</option>
      <option value="00ff7f">Spring Green</option>
      <option value="00ffff">Cyan</option>
      <option value="007fff">Azure</option>
      <option value="0000ff">Blue</option>
      <option value="7f00ff">Violet</option>
      <option value="ff00ff">Magenta</option>
      <option value="ff007f">Rose</option>
      </select>
      

      查看代码

      http://jsfiddle.net/VF26G/1/

      【讨论】:

      • 我没有看到行之间有任何区别。
      【解决方案6】:

      试试这个:

      <select name="color">
        <option value="ff0000" style="background-color:ff0000" >Red</option>
        <option value="ff7f00" style="background-color:ff7f00">Orange</option>
        <option value="ffff00" style="background-color:ffff00">Yellow</option>
        <option value="7fff00" style="background-color:7fff00">Chartreuse</option>
        <option value="00ff00" style="background-color:00ff00">Green</option>
        <option value="00ff7f" style="background-color:00ff7f">Spring Green</option>
        <option value="00ffff" style="background-color:00ffff">Cyan</option>
        <option value="007fff" style="background-color:007fff">Azure</option>
        <option value="0000ff" style="background-color:0000ff">Blue</option>
        <option value="7f00ff" style="background-color:7f00ff">Violet</option>
        <option value="ff00ff" style="background-color:ff00ff">Magenta</option>
        <option value="ff007f" style="background-color:ff007f">Rose</option>
      </select>
      

      【讨论】:

        【解决方案7】:

        因此,如果不完全替换 select,就不可能在悬停时更改 selectoption 的背景颜色。

        这是从 HTML 中删除键和值并使用选项列表填充其他内容的简单示例:

        http://jsfiddle.net/yftW6/1/

        var colorList = {};
        var colorKeys = [];
        
        $('.form-control option').each(function(index) {
            colorList[$(this).val()] = $(this).text();
        });
        
        for (var key in colorList) {
            $('.color-replacer').append('<span class="color-' + key + '">' + colorList[key] + '</span>');
        }
        
        $('.color-replacer span').click(function() {
            $('.form-control').val($(this).prop('class').replace('color-', ''));
        });
        

        单击替换选项后,它会返回并更新原始select。您可以使用 jQuery 隐藏选择,这样没人会看到它($('.form-control').hide(); 在顶部。)

        【讨论】:

        • 很遗憾,这行不通。下拉菜单仍然是白色的,带有蓝色突出显示的行。
        • 您的意思是在突出显示时您希望颜色不同?如果您的意思是突出显示,那么您很不走运,您不能仅使用 CSS 来做到这一点。您需要使用自定义 HTML 完全替换选择元素(使用 JS),以便您可以完全按照自己的意愿设置样式。表单元素的内部工作在 shadowDOM 之下,因此它的样式很大程度上取决于供应商,而不是编码人员。
        • 理想情况下,是的,在亮点期间。如果这不可能,那么我想更改选择器本身的颜色以反映所选颜色。
        • “选择器”是指光标吗?我已经更新了这个答案以反映一个 jQuery 解决方案,用元素填充不同的列表,然后将其推回选择。
        猜你喜欢
        • 1970-01-01
        • 2019-10-22
        • 2011-01-27
        • 2013-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多