RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 629352
Accepted
Alexey Giryayev
Alexey Giryayev
Asked:2020-02-18 03:01:41 +0000 UTC2020-02-18 03:01:41 +0000 UTC 2020-02-18 03:01:41 +0000 UTC

将选择的内容转换为背景

  • 772

所以。我们有这样一个脚本,用于将下拉列表转换为标记列表。

jQuery.fn.selecttolist = function(options) {
    return this.each(function() {
        var select = $(this);
        select.hide();
        var buttonsHtml = $('<div class="options-cont"></div>');
        var selectIndex = 0;
        var addOptGroup = function(optGroup) {
            if (optGroup.attr('label')) {
                buttonsHtml.append('<strong>' + optGroup.attr('label') + '</strong>');
            }
            var ulHtml = $('<ul class="select-buttons">');
            optGroup.children('option').each(function() {
                var liHtml = $('<li></li>');
                if ($(this).attr('disabled') || select.attr('disabled')) {
                    liHtml.addClass('disabled');
                    liHtml.append('<span>' + $(this).html() + '</span>');
                } else {
                    liHtml.append('<a href="javascript://" data-select-index="' + selectIndex + '">' + $(this).html() + '</a>');
                }
                if ((!options || !options.noDefault) && select.attr("selectedIndex") == selectIndex) {
                    liHtml.children('a, span').addClass('picked');
                }
                ulHtml.append(liHtml);
                selectIndex++;
            });
            buttonsHtml.append(ulHtml);
        }
        var optGroups = select.children('optgroup');
        if (optGroups.length == 0) {
            addOptGroup(select);
        } else {
            optGroups.each(function() {
                addOptGroup($(this));
            });
        }
        select.after(buttonsHtml);
        buttonsHtml.find('a').click(function(e) {
            e.preventDefault();
            buttonsHtml.find('a, span').removeClass('picked');
            $(this).addClass('picked');
            $(select.find('option')[$(this).attr('data-select-index')]).attr('selected', 'selected');
            select.trigger('change');
        });
    });
};

$('select').selecttolist();
$('li:first-child').children().addClass('picked');
body,
ul {
  margin: 0;
  padding: 0;
}
ul {
  display: flex;
  flex-wrap: wrap;
  list-style: none;
}
a {
  display: block;
  color: #333;
  text-decoration: none;
  padding: 10px;
}
div {
  padding: 30px;
}
a:hover,
.picked {
  background: #eee;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="shop-options-s " id="id-oval" onchange="changeOptions('/shop/desc/krasula', 'id', '36', this)">
    <option value="0">Простое значение</option>
    <option value="1">Простое значение 2</option>
    <option value="2">#CC0000</option>
    <option value="3">#336600</option>
    <option value="4">Белый</option>
    <option value="5">Черный</option>
    <option value="6">Красный</option>
    <option value="7">Серый</option>
    <option value="8">Полоска</option>
    <option value="9">Кружок</option>
</select>

问题是。是否可以将选择器选项内容的检查附加到此解决方案,并用找到的值填充块的背景。我正在尝试 2 个选项。

1日。当根据第一个字符和字符数检查选项的内容时。例如,在这种形式的 option:<option value="1">#336600</option>中,如果第一个字符是#,并且字符总数是 7,那么我们将这个 hash 插入到background创建的下拉列表的链接中。

第二。创建一个具有给定值的文件,如下所示:

jQuery.fn.selecttolist.init({
colors: {
'Черный': '#000000',
'Красный': '#FF0000',
'Белый': '#FFFFFF',
'Серый': '#CCCCCC',
'Полоска': 'url(/images/poloska.png) no-repeat center center',
'Кружок': 'url(/images/krug.png) no-repeat center center'
},
hideColorsTitle: true 
});

如果选项的内容与列表中的给定值相匹配,则将此值替换到background创建的项目符号列表的链接中。

您希望收到什么:

在此处输入图像描述

如果有任何帮助,我将不胜感激,因为我自己已经被这项任务折磨得够呛。

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    br3t
    2020-02-20T19:16:36Z2020-02-20T19:16:36Z

    jQuery.fn.selecttolist = function(options) {
      return this.each(function() {
        var select = $(this);
        select.hide();
        var buttonsHtml = $('<div class="options-cont"></div>');
        var selectIndex = 0;
        var addOptGroup = function(optGroup) {
          if (optGroup.attr('label')) {
            buttonsHtml.append('<strong>' + optGroup.attr('label') + '</strong>');
          }
          var ulHtml = $('<ul class="select-buttons">');
          optGroup.children('option').each(function() {
            var liHtml = $('<li></li>');
            if ($(this).attr('disabled') || select.attr('disabled')) {
              liHtml.addClass('disabled');
              liHtml.append('<span>' + $(this).html() + '</span>');
            } else {
              var content = $(this).html();
              var style = "";
              if (/#[0-9a-fA-F]{6}/.test(content)) { // is css-color
                style = "background: " + content;
              } else if (content in options.colors) { // is predefined background
                style = "background: " + options.colors[content];
              }
              liHtml.append('<a href="javascript://" data-select-index="' + selectIndex + '" style="' + style + '">' + $(this).html() + '</a>');
            }
            if ((!options || !options.noDefault) && select.attr("selectedIndex") == selectIndex) {
              liHtml.children('a, span').addClass('picked');
            }
            ulHtml.append(liHtml);
            selectIndex++;
          });
          buttonsHtml.append(ulHtml);
        }
        var optGroups = select.children('optgroup');
        if (optGroups.length == 0) {
          addOptGroup(select);
        } else {
          optGroups.each(function() {
            addOptGroup($(this));
          });
        }
        select.after(buttonsHtml);
        buttonsHtml.find('a').click(function(e) {
          e.preventDefault();
          buttonsHtml.find('a, span').removeClass('picked');
          $(this).addClass('picked');
          $(select.find('option')[$(this).attr('data-select-index')]).attr('selected', 'selected');
          select.trigger('change');
        });
      });
    };
    
    $('select').selecttolist({
      colors: {
        'Черный': '#000000',
        'Красный': '#FF0000',
        'Белый': '#FFFFFF',
        'Серый': '#CCCCCC',
        'Полоска': 'url(/images/poloska.png) no-repeat center center',
        'Кружок': 'url(/images/krug.png) no-repeat center center'
      },
      hideColorsTitle: true
    });
    $('li:first-child').children().addClass('picked');
    body,
    ul {
      margin: 0;
      padding: 0;
    }
    
    ul {
      display: flex;
      flex-wrap: wrap;
      list-style: none;
    }
    
    a {
      display: block;
      color: #333;
      text-decoration: none;
      padding: 10px;
    }
    
    div {
      padding: 30px;
    }
    
    a:hover,
    .picked {
      background: #eee;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <select class="shop-options-s " id="id-oval" onchange="changeOptions('/shop/desc/krasula', 'id', '36', this)">
        <option value="0">Простое значение</option>
        <option value="1">Простое значение 2</option>
        <option value="2">#CC0000</option>
        <option value="3">#336600</option>
        <option value="4">Белый</option>
        <option value="5">Черный</option>
        <option value="6">Красный</option>
        <option value="7">Серый</option>
        <option value="8">Полоска</option>
        <option value="9">Кружок</option>
    </select>

    • 3
  2. Nick
    2020-02-22T08:48:24Z2020-02-22T08:48:24Z

    检查值option是否存在HEX。

    /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(str)
    

    https://jsfiddle.net/t98x3urp/

    如果找到颜色,请更改background:

    var val = $(this).html(),
        style = '';
    if (/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(val)) {
        style = ' style="background: ' + val + ';"'
    }
    if ($(this).attr('disabled') || select.attr('disabled')) {
       liHtml.addClass('disabled');
       liHtml.append('<span' + style + '>' + $(this).html() + '</span>');
    } else {
       liHtml.append('<a href="javascript://" data-select-index="' + selectIndex + '"' + style + '>' + $(this).html() + '</a>');
    }
    

    完整代码 - https://jsfiddle.net/bjqxqraq/

    你可以用同样的方式检查background-image。

    并显示值或仅显示样式: liHtml.append('<a href="javascript://" data-select-index="' + selectIndex + '"' + style + '>' + (style !== '' ? $(this).html() : '') + '</a>');

    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5